当前,我正在尝试将Objective-C代码转换为Swift,并遇到id类型委托的问题。
下面的代码如下:
@property (weak, nonatomic) id <TestDelegate> delegate;
在初始化期间,正在发送一个控制器并将其设置为委托,如下所示:
- (instancetype)initWithController:(id)controller {
self = [super init];
if (self) {
self.delegate = controller;
}
return self;
}
您会注意到,由于这里的委托是一个ID类型,可以保留任何类型的引用,因此它存储了委托的控制器的引用,并且正在传递的控制器符合“ TestDelegate”的协议”。但是,我很好奇您如何迅速实现这一目标?
谢谢
答案 0 :(得分:0)
我认为id类型映射为“ Any”。这很危险,应该迅速用实际类型替换
weak var delegate: TestDelegate?
init(delegate: TestDelegate) {
self.delegate = delegate
}
答案 1 :(得分:0)
如果要处理引用类型,通常将协议定义为class
协议:
protocol TestDelegate: class {
...
}
然后将您的delegate
属性设置为weak
:
class Foo {
weak var delegate: TestDelegate?
init(delegate: TestDelegate) {
self.delegate = delegate
}
}