Swift对象类型枚举结构体类

Swift对象类型:枚举、结构体、类

对象类型声明

对象类型是通过一种对象类型风格(enum、struct与class)、对象类型的名字(应该以一个大写字母开头)和一对花括号进行声明的:

对象类型声明

对象类型声明可以出现在任何地方:在文件顶部、在另一个对象类型声明顶部,或在函数体中。对象类型相对于其他代码的可见性(作用域)与可用性取决于它声明的位置。

方法

声明在对象类型声明顶部的函数就是方法。在默认情况下,方法都是实例方法;可以通过向该类型的特定实例发送消息来调用它。在实例方法内部,self就是实例本身。

初始化器

初始化器是一种函数,其声明语法与函数非常像。要想声明初始化器,你需要使用关键字init,后跟一个参数列表,然后是包含代码的花括号。一个对象类型可以有多个初始化器,由参数进行区分。在默认情况下,参数名(包括第一个参数)都是外化的(当然了,你可以在参数名前通过下划线阻止这一点)。

编写了初始化器,因此隐式初始化器就不复存在了。letcat=Cat()是隐式初始化器。可以显式声明一个不带参数的初始化器,这样上述代码就合法了

属性要么在声明中初始化,要么被每个初始化器初始化,否则编译器会报错。

除了设置实例属性,初始化器不能引用self,无论显式还是隐式都不可以,除非所有实例属性都完成了初始化。这个原则可以确保实例在使用前已经完全构建完毕。

委托初始化器

对象类型中的初始化器可以通过语法self.init(……)调用其他初始化器。调用其他初始化器的初始化器叫作委托初始化器。当一个初始化器委托另一个初始化器时,被委托的初始化器必须要先完成实例的初始化,接下来委托初始化器才能使用初始化完毕的实例,可以再次设置被委托初始化器已经设定的var属性.

委托初始化器不能设置不可变属性(即let变量)。这是因为只有在调用了其他初始化器后它才可以引用属性,而这时实例已经构建完毕——初始化已经结束,通往不可变属性的初始化之门已经关闭。

可失败初始化器

初始化器可以返回一个包装新实例的Optional。通过这种方式,可以返回nil来表示失败。具备这种行为的初始化器叫作可失败初始化器。在声明时要想将某个初始化器标记为可失败的,请在关键字init后面放置一个问号(对于隐式展开Optional,放置一个感叹号)。如果可失败初始化器需要返回nil,请显式写明returnnil。判断返回的Optional与nil是否相等是调用者的事,请展开它,然后比较,与其他Optional的做法一样。

比如,UIImage初始化器init?(named:)就是个可失败初始化器,因为给定的名字可能并不表示一张图片。它不会隐式展开,因此结果值是一个UIImage?,并且在使用前需要展开(不过,大多数Objective-C初始化器都没有被桥接为可失败初始化器,即便从理论上说,任何Objective-C初始化器都可能返回nil)。

Setter观察者在属性的初始化过程中是不会被调用的。

初始化属性的代码不能获取实例属性,也不能调用实例方法。这种行为需要一个对self的显式或隐式引用;在初始化过程中还不存在self,self是在初始化过程中所创建的。




转载请注明:http://www.aierlanlan.com/grrz/1494.html

  • 上一篇文章:
  •   
  • 下一篇文章: