首页 » iOS编程基础:Swift、Xcode和Cocoa入门指南 » iOS编程基础:Swift、Xcode和Cocoa入门指南全文在线阅读

《iOS编程基础:Swift、Xcode和Cocoa入门指南》1.13 self

关灯直达底部

实例是一个对象,对象则是消息的接收者。因此,实例需要通过一种方式才能将消息发送给自己。这是通过神奇的单词self实现的。该单词可以用在需要恰当类型的实例的情况下。

比如,假设我想要在一个属性中记录下Dog吼叫时所喊出的内容,即"woof"。接下来,在bark的实现中,我需要使用该属性,可以像下面这样做:


class Dog {    var name = ""    var whatADogSays = "woof"    func bark {        print(self.whatADogSays)    }}  

与之类似,假设我想要编写一个实例方法speak,表示bark的同义词。该speak实现只需调用自己的bark方法即可。可以像下面这样做:


class Dog {    var name = ""    var whatADogSays = "woof"    func bark {        print(self.whatADogSays)    }    func speak {        self.bark    }}  

注意该示例中self只出现在实例方法中。当一个实例的代码使用self时,表示引用该实例。如果表达式self.name出现在Dog的实例方法代码中,它表示该Dog实例的名字,即此时此刻运行该代码的实例。

实际上self是完全可选的,你可以省略它,结果完全一样:


class Dog {    var name = ""    var whatADogSays = "woof"    func bark {        print(whatADogSays)    }    func speak {        bark    }}  

原因在于如果省略消息接收者,那么你所发送的消息就会发送给self,编译器会在底层将self作为消息接收者。不过,我从来不会这么做(除非写错了)。作为一种风格,我喜欢显式在代码中使用self。我觉得省略self的代码的可读性与可理解性都会变得很差。在某些情况下,self是不能省略的,因此我倾向于在可能的情况下都使用self。