Swift クラス
Swift クラスは、コードを構築するための汎用的で柔軟な構成要素です。
クラスにプロパティ(定数、変数)とメソッドを定義できます。
他のプログラミング言語とは異なり、Swift ではカスタムクラス用に独立したインターフェースファイルと実装ファイルを作成する必要はありません。必要なのは、単一のファイル内でクラスを定義することだけであり、システムが他のコード向けの外部インターフェースを自動的に生成します。
クラスと構造体の比較
Swift におけるクラスと構造体には多くの共通点があります。共通点は以下のとおりです:
- 値を格納するためのプロパティを定義する
- 機能を提供するためのメソッドを定義する
- 値にアクセスするための添え字(サブスクリプト)を定義する
- 初期化値を生成するためのイニシャライザを定義する
- 拡張によってデフォルト実装の機能を追加する
- プロトコルに準拠して、あるクラスに標準機能を提供する
構造体と比較して、クラスにはさらに以下の追加機能があります:
- 継承により、あるクラスが別のクラスの特性を継承できます
- 型キャストにより、実行時にクラスインスタンスの型を検査および解釈できます
- デイニシャライザにより、クラスインスタンスが割り当てられたリソースを解放できます
- 参照カウントにより、クラスの複数参照が可能になります
構文:
class classname {
Definition 1
Definition 2
……
Definition N
}
クラス定義
class student{
var studname: String
var mark: Int
var mark2: Int
}
クラスのインスタンス化:
let studrecord = student()
インスタンス
import Cocoa
class MarksStruct {
var mark: Int
init(mark: Int) {
self.mark = mark
}
}
class studentMarks {
var mark = 300
}
let marks = studentMarks()
print("成绩为 \(marks.mark)")
上記のプログラムを実行すると、出力結果は次のようになります:
成绩为 300
参照型としてクラスプロパティにアクセスする
クラスのプロパティは、.によってアクセスできます。形式は次のとおりです:インスタンス化クラス名.プロパティ名:
import Cocoa
class MarksStruct {
var mark: Int
init(mark: Int) {
self.mark = mark
}
}
class studentMarks {
var mark1 = 300
var mark2 = 400
var mark3 = 900
}
let marks = studentMarks()
print("Mark1 is \(marks.mark1)")
print("Mark2 is \(marks.mark2)")
print("Mark3 is \(marks.mark3)")
上記のプログラムを実行すると、出力結果は次のようになります:
Mark1 is 300 Mark2 is 400 Mark3 is 900
同一性演算子
クラスは参照型であるため、複数の定数や変数がバックグラウンドで同時に同じクラスインスタンスを参照している可能性があります。
2つの定数または変数が同じクラスインスタンスを参照しているかどうかを判定できるように、Swift には2つの同一性演算子が組み込まれています:
| 同一性演算子 | 非同一性演算子 |
|---|---|
| 演算子は:=== | 演算子は:!== |
| 2つの定数または変数が同じクラスインスタンスを参照している場合は true を返します | 2つの定数または変数が異なるクラスインスタンスを参照している場合は true を返します |
インスタンス
import Cocoa
class SampleClass: Equatable {
let myProperty: String
init(s: String) {
myProperty = s
}
}
func ==(lhs: SampleClass, rhs: SampleClass) -> Bool {
return lhs.myProperty == rhs.myProperty
}
let spClass1 = SampleClass(s: "Hello")
let spClass2 = SampleClass(s: "Hello")
if spClass1 === spClass2 {// false
print("引用相同的类实例 \(spClass1)")
}
if spClass1 !== spClass2 {// true
print("引用不相同的类实例 \(spClass2)")
}
上記のプログラムを実行すると、出力結果は次のようになります:
引用不相同的类实例 SampleClassその他の拡張