Swift 您使用哪种';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

我有一个小问题

在这种情况下,您使用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"

    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的机会……”是对我最好的回答,非常感谢。