27 / 27100%

LESSON 27 ・ クラス

クラスとコレクション

オブジェクトを配列で管理する

class Student {
    var name: String
    var score: Int

    init(_ name: String, _ score: Int) {
        self.name = name
        self.score = score
    }

    func show() {
        print("\(self.name): \(self.score)点")
    }
}

let students = [
    Student("Mary", 65),
    Student("Mike", 90),
    Student("Tom", 85)
]
for student in students {
    student.show()
}

クラスを使うことで、複数の生徒の情報を一つの配列で管理することができます。

配列のメソッド

var a = [2, 1, 7, 5]
print(a)

a.append(3)
print(a)

a.removeAll { value in value == 1 }
print(a)

a.sort()
print(a)

Swiftの配列はクラスではなく構造体ですが、同じようにメソッドを持っています。

要素を追加したり、指定した要素を削除したり、小さい順に並べ替えたりすることができます。使うメソッド名は言語によって異なります。

文字列のメソッド

let a = "2,3,5,7"
let b = a.split(separator: ",")
let c = b.compactMap { value in Int(value) }
print(c)

Swiftの文字列もメソッドを持っています。

たとえば、splitメソッドを使えば文字列を分割することができます。

ここでは、"2,3,5,7"という文字列を,で分割しています。しかし、分割して得られた配列の要素は["2", "3", "5", "7"]のように文字列になっているので、これをさらにIntを使って整数に変換しています。

SwiftのInt(value)は、変換できない文字列を受け取る可能性があるため、Int?というOptionalの値を返します。compactMapを使うと、変換に成功した整数だけを新しい配列にまとめられます。これがSwiftでこの例を表す際に追加で必要になる型の説明です。

PRACTICE

演習問題

コードを自分で書いて実行してから、答えと解説を確認しましょう。

問題1

名前と点数を作成時に受け取り、showメソッドで表示できるStudentクラスを定義してください。二人分のオブジェクトを一つの配列にまとめ、すべての生徒のshowを呼び出してください。

答えと解説を見る

模範解答

class Student {
    var name: String
    var score: Int

    init(_ name: String, _ score: Int) {
        self.name = name
        self.score = score
    }

    func show() {
        print("\(self.name): \(self.score)点")
    }
}

let students = [
    Student("Mary", 65),
    Student("Mike", 90)
]
for student in students {
    student.show()
}

オブジェクトも配列の要素にできます。ループで一つずつ取り出すと、それぞれのオブジェクトに対してメソッドを呼び出せます。

問題2

[4, 1, 7, 3]5を追加し、1を削除してから、小さい順に並べ替えて表示してください。

答えと解説を見る

模範解答

var numbers = [4, 1, 7, 3]
numbers.append(5)
numbers.removeAll { value in value == 1 }
numbers.sort()
print(numbers)

追加、削除、並べ替えを順番に行います。最後に表示される内容は[3, 4, 5, 7]です。

問題3

文字列"10,20,30,40",で分割し、すべての要素を整数に変換してください。変換した整数の合計を求めて表示してください。

答えと解説を見る

模範解答

let text = "10,20,30,40"
let parts = text.split(separator: ",")
let numbers = parts.compactMap { value in Int(value) }

var total = 0
for number in numbers {
    total += number
}

print(total)

splitの結果は文字列なので、整数へ変換してから足します。4個の整数の合計である100が表示されます。