RMe*_*uws 3 delegates optional ios swift
我已经宣布了这个协议
protocol ReactorDelegate {
func ReactorUpdateUI()
}
Run Code Online (Sandbox Code Playgroud)
在我的模型中,我有一个委托可选属性并检查是否不是nill,解包它以调用VC提供的协议方法.
var delegate:ReactorDelegate?
if delegate {delegate?.ReactorUpdateUI()}
Run Code Online (Sandbox Code Playgroud)
我的VC遵循协议并具有ReactorUpdateUI方法
class VC_Reactor: UIViewController, ReactorDelegate
Run Code Online (Sandbox Code Playgroud)
我正在尝试在VC中创建模型的实例,但这失败了
let reactorCore=Reactor()
Run Code Online (Sandbox Code Playgroud)
错误:'Reactor'不能用'()'构建, 让我知道并非所有属性都有初始值.
我可以通过在VC中使用隐式解包的可选项var reactorCore:Reactor!
和使用自定义init的ViewDidLoad中的委托来解决它
:reactorCore=Reactor(delegate:self)
init(delegate:ReactorDelegate)如果我声明delegate属性是可选的,我不明白为什么我需要自定义.
Nat*_*ook 18
您需要在委托协议中将该方法标记为可选:
@objc protocol ReactorDelegate {
optional func ReactorUpdateUI()
}
Run Code Online (Sandbox Code Playgroud)
然后将您的类标记为,@objc并在方法上使用可选链接:
delegate?.ReactorUpdateUI?()
Run Code Online (Sandbox Code Playgroud)
注意:在编写协议时,最简单的方法是保留所需的所有内容并将类中的方法存根,然后当一切正常时,返回并使您想要的选项成为可选项.您获得的错误消息非常不透明,因此您一次处理的问题较少.
| 归档时间: |
|
| 查看次数: |
6935 次 |
| 最近记录: |