iOS - Swift 創(chuàng)建代理協(xié)議的多種方式

假如有一個類為 LXFView,現(xiàn)在要為這個類創(chuàng)建一個代理協(xié)議,我們該如何做呢?

首先,代理協(xié)議的命名方式:類名 + Delegatev

protocol LXFViewDelegate {
    func view(_ view: LXFView)
}

當(dāng)我們創(chuàng)建的協(xié)議遵守其它協(xié)議的情況下,只是這樣寫并不會報錯,接下來我們在LXFView中添加一個代理屬性,為避免循環(huán)引用,代理屬性需要用weak修飾

class LXFPageView: UIView {
    
    weak var delegate: LXFViewDelegate?
    
}

此時就報錯了,提示如下

'weak' may only be applied to class and class-bound protocol types, not 'LXFViewDelegate'
報錯

意思是weak只能修飾一個類或者類綁定協(xié)議的類型

正如提示一樣,我們當(dāng)前的代理并非是一個類或者類綁定協(xié)議的類型
當(dāng)前我們這個協(xié)議不僅可以被類遵守,還可以被結(jié)構(gòu)體和枚舉所遵守(這里不演示了),這無法達(dá)到weak的要求,那怎么辦呢?

解決辦法有兩個:

  • 辦法1

直接在協(xié)議的后面寫上【: class】或者【: NSObjectProtocol】

protocol LXFPageViewDelegate: class
// 或者
protocol LXFPageViewDelegate: NSObjectProtocol
class

這種方式下推薦【: class】,相比之下更為輕量級

  • 辦法2
    在protocol前面加上【@objc】,表示objc類型的協(xié)議
@objc protocol LXFPageViewDelegate
objc

這種方式下的優(yōu)點是協(xié)議中的方法不強制實現(xiàn)

歡迎關(guān)注微信公眾號:linxunfengtop
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第二章 - 是你 壽宴后,等皇上下了宴臺,貴妃搶先皇后一步來到霓凰桌前。 “郡主,近來可好啊?你我同為云南鄉(xiāng)里,你...
    南閣瑤沐閱讀 448評論 0 0
  • 做人要謙虛才能博得大家的認(rèn)可,一個自大的人是不會成功的,不要有太多的虛榮心,做事做人,都問扣心自問,無愧于人生就行...
    masak35閱讀 192評論 0 0
  • 1、cookie基本介紹 Cookie是在客戶端存儲服務(wù)器狀態(tài)的一種機制,Web服務(wù)器可以通過Set-Cookie...
    天之魚閱讀 8,860評論 1 13

友情鏈接更多精彩內(nèi)容