实例成员...不能用于类型 ViewController
Instance member ...cannot be used on type ViewController
xCode 版本 9.4.1
嗨,
我不明白 Xcode 控制台给出的错误信息(尽管有很多这样的话题:)。此外,当我在 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)
Instance member 'ingStackView' cannot be used on type 'ViewController'
感谢您的帮助!
您提供的 link 的公认答案很好地解释了这个问题,恕我直言。基本上,在您的示例中,您在 ingStackView
的声明中使用了三个 "previously" 声明的 UITextField
。然而,这四个变量 不一定在运行时按此顺序确定 。 Xcode 给出此错误是因为,例如,ingprice
可能在 ingStackView
之后确定。这只是一个例子,顺序不保证。
当您使用 lazy var
声明每个变量时,错误消失是因为根据 Apple 的 Swift 文档:
A lazy stored property is a property whose initial value is not calculated until the first time it is used. You indicate a lazy stored property by writing the lazy modifier before its declaration.
这意味着对于惰性变量,所有这些都是在初始化时确定的,因此您可以保证拥有所有四个变量值。
xCode 版本 9.4.1
嗨,
我不明白 Xcode 控制台给出的错误信息(尽管有很多这样的话题:
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)
Instance member 'ingStackView' cannot be used on type 'ViewController'
感谢您的帮助!
您提供的 link 的公认答案很好地解释了这个问题,恕我直言。基本上,在您的示例中,您在 ingStackView
的声明中使用了三个 "previously" 声明的 UITextField
。然而,这四个变量 不一定在运行时按此顺序确定 。 Xcode 给出此错误是因为,例如,ingprice
可能在 ingStackView
之后确定。这只是一个例子,顺序不保证。
当您使用 lazy var
声明每个变量时,错误消失是因为根据 Apple 的 Swift 文档:
A lazy stored property is a property whose initial value is not calculated until the first time it is used. You indicate a lazy stored property by writing the lazy modifier before its declaration.
这意味着对于惰性变量,所有这些都是在初始化时确定的,因此您可以保证拥有所有四个变量值。