swfit中新添加了optional这一概念。optional可以是任何类型,也就是说,我们创建任何对象的时候就可以只管创建,系统会帮你管理,自动识别类型。
也正是因为optional的原因,swift才更具有类型安全。关于optional的定义不再多说,下面就说说关于optional经常遇到的问题。
声明一个实例变量,var btn = UIButton(),或者var btn : UIButton!或者 var btn : UIButton?,第一种为声明实例变量的同时,并创建它,下面用的时候就不用再创建了。后面两个只是声明有这个实例变量,用的时候还需要再创建。 当你确定这个btn一定会存在的时候,可以使用第一种或者第二种,当你不确定的时候就可以使用第三种,在UIButton后面加?。前两种跟OC并没有什么不同,这里就详细说一下第三种 var btn :UIButton? 这种。
如果是调用btn的set、get方法的时候,都需要在btn后面加?,也就是btn?.frame。。。。特别的,如果是get方法,需要加!,(btn?.frame)!.
这些如果忘记添加了,系统会给你提示让你添加。
但是如果是字符串的话,即使按照系统的来,也会出错,如下。
这就是optional带来的一些麻烦。解决这个问题也简单,只需要确定这个类型就可以。比如var str : String?改为 var str : String 或者使用之前,先强制转换。建议声明属性的时候,直接使用!代替?。问题也会少很多。