ваше свойство image обращается к свойству блока до того, как они оба будут инициализированы, чтобы решить вашу проблему, ваша переменная "изображение" должна быть помечена как ленивая переменная, то есть она будет инициализирована после того, как другие свойства были инициализированы, следовательно, к ней можно безопасно обращаться.эти другие свойства.
Подробнее о ленивых свойствах
В официальной документации Swift сказано: ,
"Ленивые свойства полезны, когданачальное значение свойства зависит от внешних факторов, значения которых неизвестны до завершения инициализации экземпляра. "
Подробнее о отложенных свойствах можно прочитать здесь: - Свойства Swift Официальная документация
Вот как это сделать: -
lazy var image: Image = {
return Image(blocksArray: blocks, code: codes, color: colors)
}()
для части цвета, я думаю, что это хорошая практика, чтобы избежать ввода строк при инициализацииособенно для простых цветов, таких как ваш, и используйте версии enum.Измените это на: -
var colors = [UIColor.red]
или это: -
var colors: [UIColor] = [.red]