1、关键字
(好处:1、提高开发规范 2、在方法中才发挥一些作用 )
《1》在属性中使用关键字:
(1)nullable:可能为空。(在对象之前写一个这个标注,主要是了为了迎合swift语言)
注意:只能使用对象类型,不能用于基本类型
在swift中都需要约束是否为空。
swift是一个强语言,在编译的时候就会报错,弱语言就不会。
书写方式一:(放在属性里面)
书写方式二:
书写方式三:(只有在测试版本的时候才这样敲)
(2)nonnull:非空 (get,set非空)
书写方式一:
书写方式二:
书写方式三:
如果进入头文件,会发现很少用到nonnull这个关键字,但是在敲方法的时候,又会出现nonnull,
苹果是这样做得:
用一个宏:
在这个宏之间的,都是默认是nonnull。
(3)null_resettable : (在get方法中,为非空。在set方法中,可以为空)
注意点:必须处理为nil的情况
书写方式一:
在get方法中,为非空。在set方法中,可以为空。
用处: 有的时候,允许传得时候为空,但是返回值的时候必须有值!!!
(4)_Null_unspecified:不确定
在用点语法的时候(会出现这个)
《2》在方法中使用关键字:(两个都可以)
(1)使用方法:
2、ios9新特性之泛型
(1) 作用:限制类型
(2)使用场景:1、用于集合、数组、字典、NSSet
2、当声明一个类的时候,某个属性不确定类型,就可以使用泛型
(3)泛型的好处:提高开发的规范,一看便知道集合中是啥东东
(4)如何定义泛型:在类型后面限制,<限制类型>
如果没有用泛型去定义的话,在下面方法调用中没有提示:
定义泛型之后:
而且还有一个好处:取东西的时候方便,可以用点语法,因为知道你取的东西不是id类型了。
(id类型不能用点语法)
如果不定义泛型,是这样取数据:
如果定义了泛型,这样取数据
self.datas[0].length;
注意:1、并不是任何对象都能使用泛型
2、泛型只用于方法调用
3、在不可变数组中,是没有意义的。
自定义泛型:
如果没有定义泛型,拿到属性的时候,只能用父类。
我们的要求是以创建的时候,就知道有
在用的时候再去定义,
(5)泛型关键字:(协变、逆变)
《1》协变:(向上转,子类转父类)
这个时候,需要加一个强转:
《2》逆变:(向下转,父类转子类)
3、ios9新特性之 __kinof (UItableView)
__kindof:相当于,修饰对象,用于返回值,描述返回的类型是当前类或者子类。
从xcode5开始的时候,由原先的id变为instance。
用id的坏处:
1、id不能使用点语法。
2、能调用任何对象的方法,导致不能进行编译检查
所以在xcode5开始就会instance,因为instance会自动检测当前类的对象。
但是不管用id还是instance,都不知道返回类型,所以又有了新的改进。
当然如果你原先不传id,就直接传你想传得类型(person *),可是在创建子类的时候,会报错。
Xcode7就出了一个新的特性:
像在tableviewcell中,也有这样的情况,因为我们喜欢自定义cell,加了这个,就会返回我们想要的类型。