Swift3.0 - 真的很簡單
Swift3.0 - 數(shù)據(jù)類型
Swift3.0 - Array
Swift3.0 - 字典
Swift3.0 - 可選值
Swift3.0 - 集合
Swift3.0 - 流控制
Swift3.0 - 對象和類
Swift3.0 - 屬性
Swift3.0 - 函數(shù)和閉包
Swift3.0 - 初始化和釋放
Swift3.0 - 協(xié)議protocol
Swift3.0 - 類和結(jié)構(gòu)體的區(qū)別
Swift3.0 - 枚舉
Swift3.0 - 擴(kuò)展
Swift3.0 - 下標(biāo)
Swift3.0 - 泛型
Swift3.0 - 異常錯誤
Swift3.0 - 斷言
Swift3.0 - 自動引用計(jì)數(shù)(strong,weak,unowned)
Swift3.0 - 檢測API
Swift3.0 - 對象的標(biāo)識
Swift3.0 - 注釋
Swift3.0 - 元類型
Swift3.0 - 空間命名
Swift3.0 - 對象判等
Swift3.0 - 探究Self的用途
Swift3.0 - 類簇
Swift3.0 - 動態(tài)調(diào)用對象(實(shí)例)方法
Swift3.0 - 文本輸出
Swift3.0 - 黑魔法swizzle
Swift3.0 - 鏡像
Swift3.0 - 遇到的坑
學(xué)習(xí)目標(biāo)
- swift中的協(xié)議和OC 中協(xié)議的區(qū)別
- swift中的協(xié)議的用法
- 怎么使用
swift和Object-C 協(xié)議的區(qū)別
1.OC 中的協(xié)議只能用于類,swift中的協(xié)議不僅能用于類,還能用于結(jié)構(gòu)體和枚舉
2.OC 中的協(xié)議可以設(shè)置可選實(shí)現(xiàn),但Swift中的協(xié)議必須實(shí)現(xiàn)
3.Swift中的協(xié)議增加了一個關(guān)鍵字mutating可以決定結(jié)構(gòu)體和枚舉實(shí)現(xiàn)協(xié)議的時候,是否可以修改屬性的值
Swift協(xié)議(protocol)
- 定義一個協(xié)議
protocol LoveMusic{
func songMusic()
var simpleDescription: String { get }
mutating func modifyMusic(name:String)
}
- 協(xié)議可以繼承協(xié)議(多個)
protocol LoveMusic:Love,Skill{
func songMusic()
var simpleDescription: String { get }
mutating func modifyMusic(name:String)
}
- 協(xié)議的重寫
protocol Love{
var name:String{get set}
}
// 我們重寫協(xié)議中的屬性,讓其只要get方法即可
protocol LoveMusic:Love{
func songMusic()
var simpleDescription: String { get }
mutating func modifyMusic(name:String)
}
注意方法不能重寫
- 可以實(shí)現(xiàn)多個協(xié)議
class Student:Love,Skill{
internal var name: String = ""
internal func modifyMusic(name: String) {
}
}
- 協(xié)議類型的變量
// 協(xié)議的 標(biāo)準(zhǔn)寫法
var prptocol:ProtocolA
var delegate:ProtocolA & ProtocolB & ProtocolC
- 協(xié)議做函數(shù)參數(shù)
func getStudent(student: ProtocolA & ProtocolB){
student.dreak()
student.eat()
}
- 實(shí)現(xiàn)協(xié)議可選函數(shù)或者變量
- 在協(xié)議的前面加上關(guān)鍵字 @objc ,再在你需要設(shè)置可選方法或者屬性的前面加上關(guān)鍵字@objc 和 optional 即可
示例代碼:
@objc protocol OptionalProtocol{
@objc optional func optionalMethod()
@objc optional var name:String {set get}
}
2.還有另外一種方法可以實(shí)現(xiàn)可選協(xié)議就是遵守NSObjectProtocol
示例代碼:
public protocol SCNSceneRendererDelegate : NSObjectProtocol {
optional public func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval)
}
你應(yīng)該注意的
在協(xié)議中定義屬性的時候,必須使用set get \ get\ 修飾,但不能只用set修飾,swift要求我們屬性必須有g(shù)et方法
類不能多次繼承同一個協(xié)議
class Student:Love,Love{
internal var name: String
internal func modifyMusic(name: String) {
}
}
- 如果多個協(xié)議中有相同的方法和屬性,只需要實(shí)現(xiàn)一次即可
protocol Love{
var name:String{get set}
mutating func modifyMusic(name:String)
}
protocol Skill{
var name:String{get set}
mutating func modifyMusic(name:String)
}
class Student:Love,Skill{
internal var name: String = ""
internal func modifyMusic(name: String) {
}
}
一般人不知道
- 需求:創(chuàng)建一個協(xié)議只能被類遵守
protocol MyClassDelegate: class{
func getName()
}
什么時候必須使用類協(xié)議唾戚?
當(dāng)你要使用weak 修飾的時候
class UDP{
weak var delegate: UDPDelegate?
}
protocol UDPDelegate:class{
}