💻
Swift Method入門
Swiftという言語にはMethodという概念があります。
Methodというのは特定の型に関連付けられた関数で、下記のような2種類があります。
種別 | 説明 |
---|---|
Instance Medhod | 特定の型のインスタンスを操作するための特定のタスクと機能をカプセル化するMethod |
Type Method | 型自体に関連付けられたMethod |
上記は下記のように定義できます。
種別 | Struct | Class | Enum |
---|---|---|---|
Instance Medhod | 定義可能 | 定義可能 | 定義可能 |
Type Method | 定義可能 | 定義可能 | 定義可能 |
Instance Method
Instance Methodは、下記2つの方法で、インスタンスの機能をサポートします。
- インスタンスのプロパティにアクセスして変更する方法を提供する
- インスタンスの目的に関連する機能を提供する
このMethodは、すでに存在する特定の型のInstanceでのみ呼び出すことが可能です。
self
プロパティ
Instance Methodにおける Instance Methodでは自分自身を表すself
という特別なプロパティがあります。
このself
は自分のインスタンス自身を示します。
通常明示的にself
キーワードを記述する必要はありませんが、関数の引数が自分自身のプロパティと重複する場合などには区別のために記述する必要があります。
class SomeClass {
var someString: String
init(someString: String) {
self.someString = someString
}
}
Type Method
インスタンスではなく、型そのものに対して呼び出しが可能なメソッドが、Type Methodです。
Swiftでは、static を関数の前につけることで Type Methodを定義します
struct SomeStruct {
static func fire() {
// do something here...
}
Type Methodを実装する対象がClassの場合、static
ではなくclass
を利用することで、サブクラスがオーバーライドできるように定義することも可能です。
class SomeParent {
class func fire() {
// do something here...
}
}
このとき、サブクラス側でのオーバーライドを意図しない場合はfinal
をつけることでサブクラスによるoverrideをできなくすることが可能です。
class SomeParent {
final class func fire() {
// do something here...
}
}
class SomeChild: SomeParent {
override class func fire() {
// error: class method overrides a 'final' class method になりビルドできない
}
}
self
プロパティ
Type Methodにおける Type Methodにも暗黙的な self
プロパティは存在しますが、このときのselfは型そのものを表します。
そのため下記のようなコードはビルドできません。
struct SomeStruct {
var someString: String
static func fetch() -> String {
return self.someString // error: instance member 'someString' cannot be used on type 'SomeStruct' になりビルドできない
}
}
Discussion