2015-08-06 2 views
2

По какой причине я не могу дать значение stored property, которое зависит от значения другого в Swift 2.0?Сохраненные свойства в Swift не могут ссылаться друг на друга?

Приведенный ниже код дает ошибку говоря:

Something.Type не имеет член с именем 'Foo'

class Something { 
    let foo = "bar" 
    let baz = "\(foo) baz" 
} 

Это странно, так как Something.Type, конечно же есть член называется foo.

Есть ли способ обойти это?

+3

Сравнить http://stackoverflow.com/questions/25854300/how-to-initialize-properties- которые зависят от каждого другого, http://stackoverflow.com/questions/25855137/viewcontroller-type-does-not-have-a-member-named, http://stackoverflow.com/questions/25582853/ тип-это-не-у-а-члена. –

+0

«причина» в том, что экземпляр еще не инициализирован, поэтому вы не можете ссылаться на его членов - см. Комментарий @ MartinR для нескольких способов решения этого ограничения – fqdn

ответ

4

Похоже, вы пытаетесь инициализировать переменную baz, прежде чем у Swift появилась возможность узнать, что foo является собственностью Something. Поместите свою инициализацию внутри конструктора init.

class Something { 
    let foo: String 
    let baz: String 

    init() { 
     foo = "bar" 
     baz = "\(foo) baz" 
    } 
} 
2

Вы можете также использовать lazy инициализацию, но теперь вы должны сделать его переменной:

class Something { 
    let foo = "bar" 
    lazy var baz = { "\(self.foo) baz" }() 
} 
Смежные вопросы