Swift 您使用哪种';obj';或';self.obj';?
我有一个小问题 在这种情况下,您使用A还是B?为什么? obj和self.obj完全相同Swift 您使用哪种';obj';或';self.obj';?,swift,function,object,Swift,Function,Object,我有一个小问题 在这种情况下,您使用A还是B?为什么? obj和self.obj完全相同 let obj = MyClass() func sampleFunction(obj: MyClass) { // A obj.xxx() // B self.obj.xxxx() } self.obj引用您所在类的实例,并访问定义的obj实例变量。引用obj将引用函数范围内的命名参数 class Test { let obj = "Global" fun
let obj = MyClass()
func sampleFunction(obj: MyClass) {
// A
obj.xxx()
// B
self.obj.xxxx()
}
self.obj
引用您所在类的实例,并访问定义的obj实例变量。引用obj
将引用函数范围内的命名参数
class Test {
let obj = "Global"
func sampleFunction(obj: String) {
// A
print(obj)
// B
print(self.obj)
}
}
var t = Test()
t.sampleFunction("Internal")
将其粘贴到操场上进行演示,以帮助解释
是否使用self
引用实例变量是主观的,但如果在该范围内有另一个局部变量或命名参数与实例变量同名,则必须使用self
进行区分,如示例中所示
始终使用
self
引用实例变量是一条很好的经验法则,这提高了可读性,减少了与作用域中冲突的局部变量名相关的错误发生的可能性。self。obj
引用您所在类的实例,并访问定义的obj实例变量。引用obj
将引用函数范围内的命名参数
class Test {
let obj = "Global"
func sampleFunction(obj: String) {
// A
print(obj)
// B
print(self.obj)
}
}
var t = Test()
t.sampleFunction("Internal")
将其粘贴到操场上进行演示,以帮助解释
是否使用self
引用实例变量是主观的,但如果在该范围内有另一个局部变量或命名参数与实例变量同名,则必须使用self
进行区分,如示例中所示
始终使用
self
引用实例变量是一条很好的经验法则,这提高了可读性,并减少了与作用域中冲突的局部变量名相关的错误发生的可能性。我认为一般来说,“self.obj”更有助于理解该变量到底属于谁。您所说的“obj和self.obj完全相同”是不对的。。。它们不一样,因为obj
是函数的参数,而不是实例变量。比较一下。非常简单的obj
,和self。obj
或只是x
和self.x
并不总是完全相同的,不应该这样对待它们。需要了解范围。谢谢你的建议。是的,“obj和self.obj完全一样”是不正确的。我的问题与@Martin R提到的帖子相同,而且已经很清楚了。大家好。我认为一般来说,self.obj更能理解变量到底属于谁。你们说的“obj和self.obj完全相同”是不对的。。。它们不一样,因为obj
是函数的参数,而不是实例变量。比较一下。非常简单的obj
,和self。obj
或只是x
和self.x
并不总是完全相同的,不应该这样对待它们。需要了解范围。谢谢你的建议。是的,“obj和self.obj完全一样”是不正确的。我的问题与@Martin R提到的帖子相同,而且已经很清楚了。大家好。我落入了一个阵营,你可以随时忽略自己。像OP这样的情况是不起作用的。我个人通常使用self
,但我想指出:如果需要self
来提高可读性和/或避免与局部变量冲突,那么根本的问题不是使用self
,而是使用范围太大的函数体,闭包有太多的代码行和/或if-else分支。通过增加可读性,我的意思是,我一眼就能看出变量是实例变量。当然,我说,如果这真的增加了可读性,范围就太大了。谢谢你的帮助。我了解范围。我问当obj和self.obj引用同一个对象时,您使用哪个对象。我认为“这提高了可读性,减少了出现bug的机会……”是我最好的答案,非常感谢。我属于一个尽可能忽略self
的阵营。像OP这样的情况是不起作用的。我个人通常使用self
,但我想指出:如果需要self
来提高可读性和/或避免与局部变量冲突,那么根本的问题不是使用self
,而是使用范围太大的函数体,闭包有太多的代码行和/或if-else分支。通过增加可读性,我的意思是,我一眼就能看出变量是实例变量。当然,我说,如果这真的增加了可读性,范围就太大了。谢谢你的帮助。我了解范围。我问当obj和self.obj引用同一个对象时,您使用哪个对象。我认为“这提高了可读性,减少了出现bug的机会……”是对我最好的回答,非常感谢。