实例成员...无法在ViewController类型

时间:2018-10-07 14:23:09

标签: ios swift uiviewcontroller

xCode版本9.4.1

嗨,

我不理解Xcode控制台给出的错误消息(尽管有很多类似这样的主题:Instance member cannot be used on type 'ViewController')。此外,当我在ingStackView的代码中使用“ lazy var”时,消息消失了。

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 :(得分:0)

恕我直言,您提供的链接的可接受答案很好地说明了此问题。基本上,在您的示例中,您在UITextField的声明中使用了三个“先前”声明的ingStackView。但是,这四个变量不一定在运行时按该顺序确定。 Xcode给出此错误的原因是,例如,ingprice可能在ingStackView之后确定。这只是一个例子,不能保证顺序。

使用lazy var声明每个变量时,错误消失是因为根据Apple的Swift文档:

  

惰性存储属性是一种属性,其初始值要在首次使用时才计算。您可以通过在声明之前编写lazy修饰符来表示一个惰性存储属性。

这意味着对于惰性变量,所有变量都是在初始化时确定的 ,因此可以确保您拥有所有四个变量值。