Член экземпляра ... нельзя использовать для типа ViewController - PullRequest
0 голосов
/ 07 октября 2018

xCode Version 9.4.1

Привет,

Я не понимаю сообщение об ошибке, выданное консолью XCode (несмотря на то, что многие темы по этой теме: Элемент экземпляра не можетиспользоваться для типа 'ViewController' ).Более того, когда я использовал «lazy var» в своем коде для ingStackView, сообщение исчезает.

class ViewController: UIViewController {
var tabStackView = [UIStackView]()
var nbIngStackView = UIStepper()


var ingCompleted : UITextField = {
    let text = UITextField()
    text.placeholder = "Ingrédient"
    text.borderStyle = .roundedRect
    return text
}()
var ingweight : UITextField = {
    let text = UITextField()
    text.placeholder = "Poids"
    text.borderStyle = .roundedRect
    return text
}()
var ingprice : UITextField = {
    let text = UITextField()
    text.placeholder = "Prix"
    text.borderStyle = .roundedRect
    return text
}()



var ingStackView : UIStackView = {
    var stackView = UIStackView()
    stackView.backgroundColor = .red
    stackView.axis = .horizontal
    stackView.alignment = .fill
    stackView.distribution = .fill
    stackView.addArrangedSubview(ingCompleted)
    stackView.addArrangedSubview(ingweight)
    stackView.addArrangedSubview(ingprice)
    stackView.translatesAutoresizingMaskIntoConstraints = false
    return stackView ]()
    }

Перед:

    stackView.addArrangedSubview(ingCompleted)
    stackView.addArrangedSubview(ingweight)
    stackView.addArrangedSubview(ingprice)

Элемент экземпляра 'ingStackView' не можетиспользовать для типа 'ViewController'

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 07 октября 2018

Принятый ответ на предоставленную вами ссылку довольно хорошо объясняет эту проблему, ИМХО.По сути, в вашем примере вы используете три «ранее» объявленных UITextField s в вашем объявлении ingStackView.Однако эти четыре переменные не обязательно определяются в этом порядке во время выполнения .Xcode выдает эту ошибку, потому что, например, ingprice может быть определено после ingStackView.Это всего лишь пример, в заказе нет гарантии.

Когда вы объявляете каждую из переменных с помощью lazy var, ошибка исчезает из-за того, что согласно документации Swift Apple:

Ленивое хранимое свойство - это свойство, начальное значение которого не рассчитывается до первого использования.Вы указываете ленивое сохраненное свойство, записывая модификатор lazy перед его объявлением.

Это означает, что для ленивых переменных все они определяются при инициализации , поэтому вы гарантированноиметь все четыре значения переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...