前言
本文主要給大家介紹了ios swift創(chuàng)建代理協(xié)議的各種方式,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。
假如有一個(gè)類為 lxfview,現(xiàn)在要為這個(gè)類創(chuàng)建一個(gè)代理協(xié)議,我們?cè)撊绾巫瞿兀?/p>
首先,代理協(xié)議的命名方式:類名 + delegatev
1
2
3
|
protocol lxfviewdelegate { func view(_ view: lxfview) } |
當(dāng)我們創(chuàng)建的協(xié)議遵守其它協(xié)議的情況下,只是這樣寫并不會(huì)報(bào)錯(cuò),接下來我們?cè)趌xfview中添加一個(gè)代理屬性,為避免循環(huán)引用,代理屬性需要用weak修飾
1
2
3
|
class lxfpageview: uiview { weak var delegate: lxfviewdelegate? } |
此時(shí)就報(bào)錯(cuò)了,提示如下
1
|
'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)體和枚舉所遵守(這里不演示了),這無法達(dá)到weak的要求,那怎么辦呢?
解決辦法有兩個(gè):
辦法1
直接在協(xié)議的后面寫上【: class】或者【: nsobjectprotocol】
1
2
3
|
protocol lxfpageviewdelegate: class // 或者 protocol lxfpageviewdelegate: nsobjectprotocol |
這種方式下推薦【: class】,相比之下更為輕量級(jí)
辦法2
在protocol前面加上【@objc】,表示objc類型的協(xié)議
1
|
@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à)值,如果有疑問大家可以留言交流,謝謝大家對(duì)服務(wù)器之家的支持。
原文鏈接:https://juejin.im/post/5a3290126fb9a04511712889