selfとは?
公式によると...
self プロパティ
ある型のすべてのインスタンスは、selfと呼ばれる暗黙のプロパティを持つ。selfプロパティは、インスタンスメソッド内で現在のインスタンスを参照するために使用します。
上の例のincrement()メソッドは、次のように書くことができる:
func increment() {
self.count += 1
}
実際には、コードに self を書く必要はあまりありません。明示的に self を書かない場合、Swift は、メソッド内で既知のプロパティまたはメソッド名を使用するときはいつでも、現在のインスタンスのプロパティまたはメソッドを参照していると仮定します。この仮定は、Counterの3つのインスタンスメソッド内で(self.countではなく)countを使用することで実証されています。
このルールの主な例外は、インスタンス・メソッドのパラメータ名がそのインスタンスのプロパティと同じ名前の場合に発生する。この状況では、パラメータ名が優先され、より修飾された方法でプロパティを参照する必要が生じます。パラメータ名とプロパティ名を区別するには、selfプロパティを使用します。
ここでは、selfがxというメソッド・パラメータと、同じくxというインスタンス・プロパティを区別している:
struct Point {
var x = 0.0, y = 0.0
func isToTheRightOf(x: Double) -> Bool {
return self.x > x
}
}
let somePoint = Point(x: 4.0, y: 5.0)
if somePoint.isToTheRightOf(x: 1.0) {
print("This point is to the right of the line where x == 1.0")
}
let p = Point()
// 実行結果:
// This point is to the right of the line where x == 1.0
テキストを参照して表示する例だとこんな感じですね。
import UIKit
// selfキーワードは、コードが属するインスタンスを参照するのと同じように機能します。
class Employee {
var name = "Undefined"
func changedeName(name: String) {
self.name = name
}
}
let employee1 = Employee()
// この例のselfキーワードは、employee1変数に格納されているオブジェクトへの参照です。
employee1.changedeName(name: "Monica")
print("Name: \(employee1.name)")// Name: Monica
まとめ
self keywordの役割は、クラスと構造体の中で定義しているプロパティを参照する目的で使用するキーワードです。他の言語だったらthis
ですかね。