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'类型
感谢您的帮助!
答案 0 :(得分:0)
恕我直言,您提供的链接的可接受答案很好地说明了此问题。基本上,在您的示例中,您在UITextField
的声明中使用了三个“先前”声明的ingStackView
。但是,这四个变量不一定在运行时按该顺序确定。 Xcode给出此错误的原因是,例如,ingprice
可能在ingStackView
之后确定。这只是一个例子,不能保证顺序。
使用lazy var
声明每个变量时,错误消失是因为根据Apple的Swift文档:
惰性存储属性是一种属性,其初始值要在首次使用时才计算。您可以通过在声明之前编写lazy修饰符来表示一个惰性存储属性。
这意味着对于惰性变量,所有变量都是在初始化时确定的 ,因此可以确保您拥有所有四个变量值。