Тип не имеет члена - PullRequest
       4

Тип не имеет члена

0 голосов
/ 25 мая 2019

Я новичок в swift и пытаюсь создать очень простое приложение, но по какой-то причине переменные не работают.

Я не совсем уверен, в чем проблема, но я попытался изменить var, чтобы позволить.

class ImageViewController: ViewController {

var blocks = [Block(size: 100, centerX: 100, centerY: 100, code: "1", color: image.colorDic["1"]!)]
var codes = ["1"]
var colors = [UIColor(named: "Red")]

//create image
var image = Image(blocksArray: blocks, code: codes, color: colors)

override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .blue
    title = "Title"
    for block in image.blocksArray{
        view.addSubview(block.block)
    }
    // Do any additional setup after loading the view.
}

В строке, где я создаю изображение, я получаю сообщение об ошибке

"Тип 'ImageViewController' не имеет члена 'блоки'"

Кроме того, прямо под линией, где я создаю «цвета», я также получаю

"Тема 1: EXC_BAD_ACCESS (код = 2, адрес = 0x7ffee74cbf48)"

1 Ответ

0 голосов
/ 25 мая 2019

ваше свойство image обращается к свойству блока до того, как они оба будут инициализированы, чтобы решить вашу проблему, ваша переменная "изображение" должна быть помечена как ленивая переменная, то есть она будет инициализирована после того, как другие свойства были инициализированы, следовательно, к ней можно безопасно обращаться.эти другие свойства.

Подробнее о ленивых свойствах

В официальной документации Swift сказано: ,

"Ленивые свойства полезны, когданачальное значение свойства зависит от внешних факторов, значения которых неизвестны до завершения инициализации экземпляра. "

Подробнее о отложенных свойствах можно прочитать здесь: - Свойства Swift Официальная документация

Вот как это сделать: -

  lazy var image: Image = {
    return Image(blocksArray: blocks, code: codes, color: colors)
}()

для части цвета, я думаю, что это хорошая практика, чтобы избежать ввода строк при инициализацииособенно для простых цветов, таких как ваш, и используйте версии enum.Измените это на: -

var colors = [UIColor.red]

или это: -

var colors: [UIColor] = [.red]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...