Почему это не компилируется в Swift 1.2?
protocol Proto {
static var name : String {get set}
}
struct Struct : Proto {
static var name : String = "name"
}
(В Swift 1.1 просто замените class
на static
внутри объявления протокола. Та же проблема.)
Компилятор жалуется, что я не соблюдаю протокол. Но почему я нет? Легко доказать, что статическое свойство name
в Struct доступно как для чтения, так и для записи, так что я, безусловно, удовлетворил дух протокола.
У меня есть несколько дополнительных наблюдений:
Если я удалю
set
из требования протокола, проблема исчезнет.Если я оставлю
set
на месте, но удалюstatic
(илиclass
) из требования протокола иstatic
из реализации Struct, проблема исчезнет.Если я оставлю
static
на месте и превращу сохраненную переменную в вычисляемую, проблема исчезнет.Если я изменю структуру на класс, проблема исчезнет.
Но я не приблизился к пониманию того, что компилятору не нравится в том, что у меня есть. Почему статическое сохраненное свойство не удовлетворяет требованиям протокола?
class
вместоstruct
, он работает на Swift 1.2. - person fz.   schedule 19.02.2015didSet
обозревателя свойств решает проблему. - person Nate Cook   schedule 19.02.2015didSet
это тоже действительно пахнет ошибкой. Вы уже отправили его, верно? - person rickster   schedule 19.02.2015