[英]swift call self inside closure in init
convenience init(title: String!,
datePickerMode: UIDatePickerMode,
selectedDate: Date!,
origin view: UIView!) {
self.init(title: title,
datePickerMode: datePickerMode,
selectedDate: selectedDate,
doneBlock: { [weak self] (_, date , _) in
guard let sself = self else { return }
sself.done.next(date as! Date)
}
,
cancel: { [weak self] (_) in
guard let sself = self else { return }
sself.cancel.next()
}
,
origin: view)
But I get compiler error:但我得到编译器错误:
'self' used before self.init call
'self' 在 self.init 调用之前使用
I worked it around, with first initializing with closure nil and setting right after.我解决了这个问题,首先用闭包 nil 初始化,然后立即设置。
convenience init(title: String!,
datePickerMode: UIDatePickerMode,
selectedDate: Date!,
origin view: UIView!) {
self.init(title: title,
datePickerMode: datePickerMode,
selectedDate: selectedDate,
doneBlock: nil,
cancel: nil,
origin: view)
self.onActionSheetDone = { [weak self] (_, date , _) in
guard let sself = self else { return }
sself.done.next(date as! Date)
}
self.onActionSheetCancel = { [weak self] (_) in
guard let sself = self else { return }
sself.cancel.next()
}
But I don't understand what the problem in doing it in first way.但我不明白以第一种方式这样做有什么问题。 Thanks for providing some information
感谢您提供一些信息
In first condition, you used self
before self
had init in the closure.在第一种情况下,您在
self
在闭包中使用 init 之前使用了self
。 This is not allowed.这是不允许的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.