TOP

ios -- 教你如何轻松学习Swift语法(三) 完结篇(二)
2017-10-13 09:53:05 】 浏览:10137
Tags:ios 如何 轻松 学习 Swift 语法 完结

;
3.OC swift不支持多继承, 但是可以通过协议,间接实现多继承
 
4.协议的继承关系
     4.1 swift中的及协议和OC(NSObject)中的不同 是:NSObjectProtocol
1 protocol CrazySportProtocol : NSObjectProtocol {
2     func jumping()
3 }
 
     4.2 一个协议,可以遵守另一个协议
1 protocol SportProtocol : CrazySportProtocol {
2     func playBasketball()
3 }
     当一个类遵守了这个协议(SportProtocol) 相当于也遵守了CrazySportProtocol 协议, 所以必须实现这两个协议中的方法
 
5.协议的可选性
 
     5.1 OC中协议可以定义为可选和必选,默认是必选的
     5.2 默认情况下,swift中的协议都是必须实现的 ,否则编译器会报错
     5.3 在swift中如何让协议成为可选的(不用必须实现)
          要在协议前加 @objc ,可以保留OC某些特性,在方法前加optional  该方法就是可选的了
          在实现协议方法时,在方法前面也要加@objc
 
 1 @objc protocol SportProtocol {
 2     func playBasketball()
 3     func playFootball()
 4   //加optional该方法就成为可选的了
 5     optional func jumping()
 6 }
 7  
 8 class Person: SportProtocol {
 9     @objc func playBasketball() {  在方法前也要加上关键字@objc,不管是可选还是必选
10     } 
11     @objc func playFootball() {
12     } 
13     @objc func jumping() { 
14     }
15 }

 

6.协议在代理模式中的使用
     6.1 一般来说协议都用weak来修饰(弱引用)
     6.2 weak只能用来修饰类
     6.3 在swift中协议既可以被类遵守,也可以被结构体,枚举遵守
 
     
     6.4 如何让协议只能被类准守
          在协议名称后面加上  :class  即可
 
四.闭包
 
1.什么是闭包?
     闭包和OC中的block非常相似,一般都用来函数的回调
 
2.block的回顾
     block作为属性的格式: `@property (nonatomic, strong) void(^finishedCallback)(NSString *)`;
     block作为参数的定义格式:` (void (^)(NSString * str))finishedCallback`
 
3.闭包的格式:
     (参数列表) -> (返回值类型)
 
4.闭包的使用

 

5.尾随闭包
 1  // 尾随闭包 : 如果函数的最后一个参数是一个闭包.那么可以将函数调用写成尾随闭包
 2  //就是把闭包写到()的后面, 本来是写在()里面的
 3  tools?.loadData() { (result) in
 4      print("在ViewController中获取到数据:\(result)")
 5  }
 6        
 7  // 如果函数有且只有一个参数,并且是一个闭包, 那么()也可以省略
 8  tools?.loadData { (result) in
 9      print("在ViewController中获取到数据:\(result)")
10  }

 

6.闭包的循环引用
 
     6.1 一般在定义工具类的时候,会在工具类的方法中用到闭包
     6.2 当工具类对闭包有强引用,一个控制器又调用包含该闭包的方法,在闭包方法中使用控制器的属性,就会发生循环引用
     6.3 控制器调用方法,就会对工具类有一个强引用, 闭包又拿到控制器的属性,闭包对象就对控制器有一个强引用
 
     6.4 在内存中就相当于这种表现
          

 

7.怎么解决闭包的循环引用
 
     与oc中类型,只需要把闭包对控制器的引用改为弱引用
 
8.怎么改?
 
     当闭包修改控制器的属性时,拿到控制器的属性时,把self(控制器)改成weakself即可
weak var weakself : ViewController? = self
       
 
五.swift项目的目录结构简介
 
1.swift项目目录中没有.h和.m的文件, 只有一个.swift的文件,相当于
2.swift目录中.swift文件就相当于oc中的.h和.m文件
3.在swift中,调用项目中的其他源文件不需要导入头文件  (一个 .swift文件就是一个源文件)
 
 
六.懒加载
 
1.懒加载的介绍
     1.1 和OC中不同,swift有专门的关键字实现懒加载
     1.2 懒加载本质:当第一次使用时再加载,而且只会被加载一次
     
2.swift中用lazy关键字来实现懒加载
     2.1 懒加载格式  
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS 学习 - 19.结构体 下一篇Swift - 多个mask的动画效果