переменная, определенная в протоколе, не соответствует нескольким протоколам - PullRequest
0 голосов
/ 25 октября 2018

Я борюсь с протоколами в Swift.Я определил протокол следующим образом:

protocol AProtocol {
    var property : BProtocol {get set}
}

И я хотел бы соответствовать AProtocol в классе со свойством , которое также соответствует другому протоколу .Я пробовал этими двумя способами:

class AClass: AProtocol {
   var property = BClass()
}

и:

class AClass: AProtocol {
   var property: BProtocol & MyBClassType = BProtocol()
}

, но ни один из них, похоже, не работает (сам BClass подтверждает BProtocol) Эта проблема немного сложна для решенияобъясните, надеюсь, это было понятно.

Это ограничение языка Свифта?Вы знаете, как обойти это?

1 Ответ

0 голосов
/ 25 октября 2018

У вас есть две проблемы: во-первых, имя свойства должно совпадать с тем, которое объявлено в протоколе, во-вторых, вам нужно ввести аннотацию для переменной типа BProtocol, как объяснил Хэмиш в комментарии.

protocol AProtocol {
    var aProperty : BProtocol {get set}
}

protocol BProtocol {}
class BClass: BProtocol {}

class AClass: AProtocol {
    var aProperty: BProtocol = BClass()
}

Вы также должны соблюдать соглашение об именах Swift, которое для имен переменных является lowerCamelCase, поэтому я изменил AProperty на правильную форму, aProperty.

...