私は Swift で「自己」に関する多くの出版物を読み、その要点を把握し始めていますが、まだ不明な点が 1 つあります。
class Car {
// 1
let make: String
// 2
private(set) var color: String
init() {
make = "Ford"
color = "Black"
}
required init(make: String, color: String) {
self.make = make
self.color = color
}
// 3
func paint(color: String) {
self.color = color
}
}
let car = Car(make: "Tesla", color: "Red")
car.paint("Blue")
上記の例を参考にして、私の主張を証明しようとしています。
私が読んだいくつかの出版物は、それself
が init() からの「color」とパラメータの「color」を区別するために使用されていることを示していますfunc paint(color: String)
。
では、「セルフカラー」が に設定されているfunc paint(color: String)
場合、それはどの「カラー」を参照していますか? の 'color'init()
またはfunc paint(color: String)
?のパラメーターからの色。
self
コードが実行されているクラスの現在のインスタンスへの参照です。
init
メソッドとメソッドの両方で、パラメーターで渡された値を使用して名前が付けられpaint
たメンバー変数color
を、 とも呼ばれるメソッドに設定することを指定できますcolor
。
paint
この方法は、渡されたパラメータに参照することができないinit
すべての(またその逆)にします。
したがって、サンプル コードでは、両方のメソッドcolor
がオブジェクトの を、パラメーターとしてメソッドに渡される指定された値に設定します。
このinit
メソッドは、オブジェクトの初期色を設定します。
このpaint
メソッドを使用すると、オブジェクトの色をその初期色から変更できます。
パラメータの名前が単純に異なる場合、これはより明確になる可能性があります。たとえば、次のようになります。
required init(initialMake: String, initialColor: String) {
self.make = initialMake
self.color = initialColor
}
func paint(newColor: String) {
self.color = newColor
}
この場合、関数はメンバーメソッドであるself
ため、コンパイラーは、その名前を持つ他の変数またはパラメーターがないため、呼び出されるメンバーのみを意味color
できると認識しているため、完全にオプションです。つまり、メソッドは次のように簡単に記述できます。color
paint
func paint(newColor: String) {
color = newColor
}
これはまったく同じ動作になります。
ただし、self
厳密には必要とされない場合でも、明確にするためにプレフィックスを保持することを好む人もいます。これは、意図を明確にするだけでなく、変数またはメンバー名が変更された場合に偶発的な間違いを避けるのに役立つためです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加