【问题标题】:Error? Reading variable inside IBAction Button错误?在 IBAction Button 中读取变量
【发布时间】:2017-05-16 22:15:22
【问题描述】:

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

不能在属性初始化器中使用实例成员“动物”;属性初始化器在“self”可用之前运行

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

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的定义,但是听起来它是一个实例成员,可能在属性初始化器运行时还没有被初始化。
  • 您是否需要在初始化时填充animalName?为什么不将其设为可选并在 viewDidLoad 中对其进行初始化

标签: ios swift uibutton ibaction


【解决方案1】:

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

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!))
}

【讨论】:

  • 呃,最简单的单行字总是让我花最长时间才弄明白。
【解决方案2】:

当您在viewDidLoad() 中声明变量animalName 时,您将其用作局部变量

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

【讨论】:

    猜你喜欢
    • 2021-03-29
    • 2016-01-24
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    相关资源
    最近更新 更多