将基于Objective-C的委托转换为Swift

时间:2019-02-06 23:51:45

标签: ios objective-c swift

当前,我正在尝试将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”的协议”。但是,我很好奇您如何迅速实现这一目标?

谢谢

2 个答案:

答案 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
    }
}