iOS Swift創(chuàng)建代理協(xié)議的多種方式示例
前言
本文主要給大家介紹了iOS Swift創(chuàng)建代理協(xié)議的各種方式,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
假如有一個類為 LXFView,現(xiàn)在要為這個類創(chuàng)建一個代理協(xié)議,我們該如何做呢?
首先,代理協(xié)議的命名方式:類名 + Delegatev
protocol LXFViewDelegate { func view(_ view: LXFView) }
當我們創(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é)議的類型
正如提示一樣,我們當前的代理并非是一個類或者類綁定協(xié)議的類型
當前我們這個協(xié)議不僅可以被類遵守,還可以被結(jié)構(gòu)體和枚舉所遵守(這里不演示了),這無法達到weak的要求,那怎么辦呢?
解決辦法有兩個:
辦法1
直接在協(xié)議的后面寫上【: class】或者【: NSObjectProtocol】
protocol LXFPageViewDelegate: class // 或者 protocol LXFPageViewDelegate: NSObjectProtocol
這種方式下推薦【: class】,相比之下更為輕量級
辦法2
在protocol前面加上【@objc】,表示objc類型的協(xié)議
@objc protocol LXFPageViewDelegate
這種方式下的優(yōu)點是協(xié)議中的方法不強制實現(xiàn)
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
詳解iOS中UIView的layoutSubviews子視圖布局方法使用
這篇文章主要介紹了iOS中UIView的layoutSubviews子視圖布局方法使用,文中舉了一個layoutSubviews在iPad橫豎屏切換時被調(diào)用用來重新布局的實例,需要的朋友可以參考下2016-04-04Swift實現(xiàn)iOS應用中短信驗證碼倒計時功能的實例分享
這篇文章主要介紹了Swift實現(xiàn)iOS應用中短信驗證碼倒計時功能的實例分享,開啟和關(guān)閉倒計時功能的步驟實現(xiàn)比較關(guān)鍵,需要的朋友可以參考下2016-04-04