[Swift] オブジェクトとクラス

クラス定義はclassキーワードから始まります。
init/deinitがそれぞれイニシャライザ、デストラクタ
サブクラスを作成した時に、スーパークラスのメソッドはorverrideキーワードをつける必要があります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// クラス定義
class Shape {
    var numberOfSides = 0
    var name: String
 
    // initializer
    init (name: String) {
        self.name = name
    }
 
    // deinit デストラクタ
 
    func simpleDescription() -> String {
        return "A shape with \(numberOfSides) sides (\(name))."
    }
}
 
var shape = Shape(name:"7derection")
shape.numberOfSides = 7
print(shape.simpleDescription())
 
// サブクラスの作成
// サブクラスは:でスーパークラス名を記載する
class Square: Shape {
    var sideLength: Double
 
    init (sideLength: Double, name: String) {
        self.sideLength = sideLength
        // スーパークラスのイニシャライザをcall
        super.init(name: name)
        numberOfSides = 4
    }
 
    func area() -> Double {
        return sideLength * sideLength
    }
 
    // スーパークラスの関数をオーバーライドする時には、overrideキーワードが必須
    override func simpleDescription() -> String {
        return "A square with sides of length \(sideLength)."
    }
}
 
let testSquare = Square(sideLength: 5.2, name: "sample square")
print(testSquare.area())
print(testSquare.simpleDescription())

セッターゲッターはクラス変数を定義すると自動定義されますが
自分で処理を追加する事ができます。
(あまり多用するとよくなさそうですが)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// セッターゲッターに処理を追加することができる (あまり多用はよくなさそうだけど)
class EquilateralTriangle: Shape {
    var sideLength: Double
 
    init(sideLength: Double, name: String) {
        self.sideLength = sideLength
        super.init(name: name)
        numberOfSides = 3
    }
 
    var perimeter: Double {
        get {
            return 3.0 * sideLength
        }
        set {
            // newValueで設定する値にアクセスできる
            sideLength = newValue / 3.0
        }
    }
}
 
var triangle = EquilateralTriangle(sideLength: 3.1, name: "triangle")
print(triangle.perimeter)
triangle.perimeter = 9.9
print(triangle.sideLength)

参考URL

0 件のコメント :

コメントを投稿