1.如何在Swift中进行懒加载
使用ObjectC开发的同学,习惯性的使用懒加载去加载属性或者控件,那么到了Swift开发的时候,如何才能进行懒加载呢?
lazy var tabBarController:CustomTabBarController = {
var tab:CustomTabBarController = CustomTabBarController()
return tab
}(),使用时self.window?.rootViewController = self.tabBarController即可使用。
2.如何重写属性的setter方法
如同定义一个占位图placeHoldImage
private var plcImage:UIImage{
get{
get方法内,特别的重要,因为此刻你的一句代码,可能引起的就是一个crash,一般情况下我们直接return self.placeHoldImage! 注意此处的感叹号,在Swift中,由于声明的一个没有初始化的变量,所以我们在声明变量的时候,通常会在变量类型后面加一个问号,然后实例化过后使用的时候,我们通常使用感叹号来表明,这个变量已经初始化完成,不为空了,但是如果变量值为空的话,使用!后,将会crash。
}
set(newPlcImage){
注意此处,切不可书写picImage = newPicImage.或者self.picImage = newPicImage,一般情况下,我们定义两个属性,一个为placeHoldImage,一个为plcImage,此处可写为self.placeHoldImage = NewPicImage.使用的时候可以通过使用
}
}
2.Swift中?和感叹号的区别
问号?
a.声明时添加?,告诉编译器这个是Optional的,如果声明时没有手动初始化,就自动初始化为nil
b.在对变量值操作前添加?,判断如果变量时nil,则不响应后面的方法。
叹号!
a.声明时添加!,告诉编译器这个是Optional的,并且之后对该变量操作的时候,都隐式的在操作前添加!
b.在对变量操作前添加!,表示默认为非nil,直接解包进行处理
3.如何在Swift中使用类似于OC中的Block
使用Block进行值得回传调用,是很多OC开发者必备的技能,那么到了Swift语言开发的道路上,如何继续使用此技能呢?
答案就是闭包。例如
/**
当点击图片的时候,相应的返回value所在的index,和value所对应的链接,便于
页面之间的跳转
*/
typealias clickBlock = (_ index:NSInteger) -> Void
声明一个这样类型的点击事件Block,在定义属性的时候,将闭包声明为变量
var clickActionBlock:clickBlock? ,在使用的时候呢,我们可以
if (self.clickActionBlock != nil) {
self.clickActionBlock!(_currentIndex!)
}这样,和使用OC的block差不多。不同的是,在block 回传值得地方,书写改变了,写法为
self.picView?.clickActionBlock = {(_ index:NSInteger) in
print("第\(index) 张图片被点击")
},这样的写法,就可以帮助你在Swift中尽情的使用Block了。