инициализаторы свойства swift запускаются до того, как станет доступно «self» - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть следующие 2 класса Item & Items:

class Item{
    var name: String

    init(name: String) {
        self.name = name
    }
}

class Items{
    init(item: Item?) {
        self.item = item
    }
    var item: Item?
}

Затем я пытаюсь сделать:

class MockData{        
    let item1 = Item(name: "XXX")
    let items : Items = Items(item: item1)
}

Я получаю ошибку во второй переменной: Невозможно использовать экземпляр элемента ' item1 'в инициализаторе свойства; инициализаторы свойств запускаются до того, как становится доступным 'self'

Почему это так?

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Здесь уже есть хорошее объяснение: Инициализаторы свойств запускаются до того, как станет доступно 'self'

Но вы не можете инициализировать свойства, которые зависят друг от друга на верхнем уровне класс или структура.

struct dummy {
    let item1: Item
    let items1 : Items = Items(item: item1)

    init(name: String) {
        item1 = Item(name: name)
        items1 = Items(item: item1)
    }

}
0 голосов
/ 07 апреля 2020

Вы не можете выполнить код на верхнем уровне класса, который ссылается на self.

Что вы можете сделать, это создать Item в той же строке

class MockData {
    let items = Items(item: Item(name: "XXX"))
}
...