Возможна ли реализация по умолчанию переменной get-set в расширении протокола?

Можно ли создать переменную в протоколе (реализация по умолчанию)? В частности, у меня есть переменная, требуемая протоколом, как:

protocol SearchHandlingDelegate: class {
    ...
    var lastSearchTerm: String { get set }
    ...
}

и надеялся иметь реализацию по умолчанию в расширении протокола как:

extension SearchHandlingDelegate {
    ...
    var lastSearchTerm: String {
        set { lastSearchTerm = newValue }
        get { return lastSearchTerm }
    }
    ...
}

Но это бездонный рекурсивный цикл самовызова… Я мог бы заставить его возвращать значение другой переменной, но тогда это невозможно будет сделать через реализацию протокола по умолчанию…


person EndersJeesh    schedule 20.03.2017    source источник
comment
Расширения не могут добавлять сохраненные свойства — однако вы можете использовать объекты, связанные с Obj-C, см., например, stackoverflow.com/q/25426780/2976878 (обман?)   -  person Hamish    schedule 20.03.2017


Ответы (1)


Вы можете предоставить реализации свойств get/set по умолчанию для вычисляемых значений, но вы не можете добавить хранилище к типу из расширения.

person colinrf    schedule 21.03.2017