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

クラス定義はclassキーワードから始まります。 init/deinitがそれぞれイニシャライザ、デストラクタ サブクラスを作成した時に、スーパークラスのメソッドはorverrideキーワードをつける必要があります。 ```swift `gutter:true; // クラス定義 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()) ``` セッターゲッターはクラス変数を定義すると自動定義されますが 自分で処理を追加する事ができます。 (あまり多用するとよくなさそうですが) ```swift `gutter:true; // セッターゲッターに処理を追加することができる (あまり多用はよくなさそうだけど) 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 * [Swiftツアー](https://docs.swift.org/swift-book/GuidedTour/GuidedTour.html) * [GitHub](https://github.com/k28/swift_study.git)

0 件のコメント :

コメントを投稿