我是Swift的初学者,确实遇到了这个问题。
我有一个原型细胞CurrencySwitchTableViewCell
,它是UITableViewCell
的子类。
class CurrencySwitchTableViewCell: UITableViewCell {
@IBOutlet weak internal var currencySwitchDelegate: AnyObject!
此单元格具有currencySwitchDelegate
属性,该属性应为CurrencySwitchDelegate
协议
protocol CurrencySwitchDelegate {
func didSelectCurrency(currency:Currency)
}
如何在CurrencySwitchTableViewCell
中声明我的currencySwitchDelegate
是对应于CurrencySwitchDelegate
协议的AnyObject
?
像这样的Objective-C代码的Swift模拟是什么?
NSObject<CurrencySwitchDelegate>
或id<CurrencySwitchDelegate>
p.S.
我知道我可以申报我的财产是
@IBOutlet weak internal var currencySwitchDelegate: CurrencySwitchDelegate!
但是XCode给了我@IBOutlet
修饰符的错误(IBOutlets应该是AnyObject
类)
对象通常对委托有弱引用,只有对象才能成为弱引用。您可以使用: class
通知编译器委托是一个对象
protocol CurrencySwitchDelegate: class {
func didSelectCurrency(currency:Currency)
}
目前Xcode无法执行IBOutlet协议。临时解决方案是创建另一个类型为AnyObject的IBOutlet,然后在代码中强制转换它。
@IBOutlet weak internal var outletDelegate: AnyObject?
private var delegate: CurrencySwitchDelegate? {
return self.outletDelegate as! CurrencySwitchDelegate?
}