错误?读取 IBAction 按钮内的变量

Error? Reading variable inside IBAction Button

我有一个需要从变量读取的 IBAction。但是,当将变量放在 viewDidLoad 之外时,我收到错误

Cannot use instance member 'animal' within property initializer; property initializers run before 'self' is available

我的代码如下。当我将变量移回 viewDidLoad 中时,错误表明 animalName 未声明 [​​=14=]

var animalName = (String(format: "%03d", animal.speciesId!))

@IBAction func megaKeyIBO(_ sender: Any) {
    animalName = (String(format: "%03d", animal.speciesId!)) + "-merg"
}

override func viewDidLoad() {
    super.viewDidLoad()

    //variable was originally here before moving to top
    var animalName = (String(format: "%03d", animal.speciesId!))
}

发生这种情况是因为您试图在 属性 animal.speciesId 之前初始化动物名称!已经初始化。一个简单的解决方法是:

var animalName: String!

@IBAction func megaKeyIBO(_ sender: Any) {
    animalName = (String(format: "%03d", animal.speciesId!)) + "-merg"
}

override func viewDidLoad() {
    super.viewDidLoad()

    // Initialize on viewDidLoad
    animalName = (String(format: "%03d", animal.speciesId!))
}

当您在 viewDidLoad()

中声明时,您正在使用变量 animalName 作为局部变量

局部变量仅在它们声明的函数中起作用,以便在您创建的按钮中使用 animalName 它必须声明为实例变量或在按钮的函数中