实例成员...不能用于类型 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.

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