手把手帶你學習Swift3.0(27):協議

//: Playground - noun: a place where people can play

import UIKit


/*
 1> 協議的定義
 2> 如何類遵守協議
 3> 協議在代理設計模式中如何使用
 4> 協議中方法的可選性
    protocol前面需要加上@objc
    方法前面加上 @objc optional
 */

// 1.協議的定義
protocol SportProtocol {
    // 默認情況下協議中的方法都是必須實現的方法
    func playBasketball()
    func playFootball()
}

// 2.定義類,并且遵守協議
class Teacher : SportProtocol {
    func playFootball() {
        print("踢足球")
    }
    
    func playBasketball() {
        print("打籃球")
    }
}


class Student : NSObject, SportProtocol {
    func playFootball() {
        print("踢足球")
    }
    
    func playBasketball() {
        print("打籃球")
    }
}


// 3.協議在代理設計模型中的使用
/*
 定義協議時, 協議后面最好跟上 : class
 delegate的屬性最好用weak, 用于防止產生循環引用
 */
protocol BuyTicketDelegate : class {
    func buyTicket()
}


class Person {
    
    // 定義代理屬性
    weak var delegate : BuyTicketDelegate?
    
    func goToBeijing() {
        delegate?.buyTicket()
    }
}


// 4.如何讓協議中的方法是可選方法
// optional屬于OC特性, 如果協議中有可選的方法, 那么必須在protocol前面加上@objc, 也需要在optional前面加上@objc
@objc protocol TestProtocol {
    @objc optional func test()
}


class Dog : TestProtocol {
    func test() {
        
    }
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容