iOS Swift創(chuàng)建代理協(xié)議的多種方式示例
前言
本文主要給大家介紹了iOS Swift創(chuàng)建代理協(xié)議的各種方式,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。
假如有一個(gè)類為 LXFView,現(xiàn)在要為這個(gè)類創(chuàng)建一個(gè)代理協(xié)議,我們?cè)撊绾巫瞿兀?br />
首先,代理協(xié)議的命名方式:類名 + Delegatev
protocol LXFViewDelegate {
func view(_ view: LXFView)
}
當(dāng)我們創(chuàng)建的協(xié)議遵守其它協(xié)議的情況下,只是這樣寫并不會(huì)報(bào)錯(cuò),接下來(lái)我們?cè)贚XFView中添加一個(gè)代理屬性,為避免循環(huán)引用,代理屬性需要用weak修飾
class LXFPageView: UIView {
weak var delegate: LXFViewDelegate?
}
此時(shí)就報(bào)錯(cuò)了,提示如下
'weak' may only be applied to class and class-bound protocol types, not 'LXFViewDelegate'

意思是weak只能修飾一個(gè)類或者類綁定協(xié)議的類型
正如提示一樣,我們當(dāng)前的代理并非是一個(gè)類或者類綁定協(xié)議的類型
當(dāng)前我們這個(gè)協(xié)議不僅可以被類遵守,還可以被結(jié)構(gòu)體和枚舉所遵守(這里不演示了),這無(wú)法達(dá)到weak的要求,那怎么辦呢?
解決辦法有兩個(gè):
辦法1
直接在協(xié)議的后面寫上【: class】或者【: NSObjectProtocol】
protocol LXFPageViewDelegate: class // 或者 protocol LXFPageViewDelegate: NSObjectProtocol

這種方式下推薦【: class】,相比之下更為輕量級(jí)
辦法2
在protocol前面加上【@objc】,表示objc類型的協(xié)議
@objc protocol LXFPageViewDelegate
這種方式下的優(yōu)點(diǎn)是協(xié)議中的方法不強(qiáng)制實(shí)現(xiàn)

總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
iOS無(wú)障礙適配西瓜視頻Voice?Over實(shí)踐示例
本文從研發(fā)的視角出發(fā),講述了如何使用?Voice?Over、如何適配?Voice?Over?以及適配過(guò)程中如果遇到問(wèn)題應(yīng)該如何解決。希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
iOS開源一個(gè)簡(jiǎn)單的訂餐app UI框架
這篇文章主要介紹了iOS開源一個(gè)簡(jiǎn)單的訂餐app UI框架,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
詳解IOS的Automatically Sign在設(shè)備上打包
本篇教程主要給大家分享了IOS的Automatically Sign如何在設(shè)備上直接打包,有需要的朋友參考學(xué)習(xí)下。2018-01-01
iOS Swift控制器轉(zhuǎn)場(chǎng)動(dòng)畫示例代碼
這篇文章主要給大家介紹了關(guān)于iOS Swift控制器轉(zhuǎn)場(chǎng)動(dòng)畫的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
iOS App設(shè)計(jì)模式開發(fā)中對(duì)建造者模式的運(yùn)用實(shí)例
這篇文章主要介紹了iOS App設(shè)計(jì)模式開發(fā)中對(duì)建造者模式的運(yùn)用實(shí)例,示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-04-04

