Преобразование основанного на Objective C делегата в Swift - PullRequest
0 голосов
/ 07 февраля 2019

В настоящее время я пытаюсь преобразовать код Objective-C в Swift, и столкнулся с некоторой проблемой с делегатом типа id.

Ниже приведен следующий код:

@property (weak, nonatomic) id <TestDelegate> delegate;

Во время инициализациивремя, когда контроллер отправляется и устанавливается как делегат, как это:

- (instancetype)initWithController:(id)controller {
   self = [super init];
   if (self) {
      self.delegate = controller;
   }
   return self;
}

Как вы можете заметить, поскольку делегат здесь является типом идентификатора, который может хранить любые ссылки, он сохраняетссылка на контроллер для делегата и передаваемый контроллер соответствует протоколу «TestDelegate».Тем не менее, мне любопытно, как вы можете добиться этого в кратчайшие сроки?

Спасибо

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Если вы работаете со ссылочными типами, вы обычно определяете свой протокол как class протокол:

protocol TestDelegate: class {
    ...
}

, а затем присваиваете свойству delegate weak:

class Foo {
    weak var delegate: TestDelegate?

    init(delegate: TestDelegate) {
        self.delegate = delegate
    }
}
0 голосов
/ 07 февраля 2019

Я думаю, что тип идентификатора соответствует "Any".Это опасно, и, вероятно, его следует заменить на фактический тип в swift:

weak var delegate: TestDelegate?

init(delegate: TestDelegate) {
  self.delegate = delegate
}
...