学习Swift 所遇到的坑系列(2)

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了。

你可能感兴趣的:(学习Swift 所遇到的坑系列(2))