【问题标题】:App crashes on accessing first static variable in class应用程序在访问类中的第一个静态变量时崩溃
【发布时间】:2015-12-17 03:01:12
【问题描述】:

我正在使用 Swift 构建一个 iPhone 应用程序。我创建了一个 Settings 类并在其中声明了一些静态变量,用于存储颜色。但是,每当我尝试访问我声明的第一个变量(例如下面的 Settings.grayBorderColor)时,应用程序就会崩溃(带有一些关于 Settings.grayBorderColor.unsafeMutableAddressor 的消息)。我可以访问第一个之下的任何属性就好了,如果我切换属性/变量的顺序,它仍然会访问首先声明的导致崩溃的任何属性。

class Settings {

    // MARK: Properties

    static let grayBorderColor = UIColor(red: 0.76, green: 0.76, blue: 0.76, alpha: 1.0)
    static let lightGreenColor = UIColor(red: 0.66, green: 1.0, blue: 0.66, alpha: 1.0)
    static let darkGreenColor = UIColor(red: 0.66, green: 0.0, blue: 0.0, alpha: 1.0)
    static let darkRedColor = UIColor(red: 0.66, green: 0.0, blue: 0.0, alpha: 1.0)
    static let lightRedColor = UIColor(red: 1, green: 0.66, blue: 0.66, alpha: 1.0)
    static let lightGrayColor = UIColor.lightGrayColor()
    static let mediumGrayColor = UIColor.darkGrayColor()

}

我做错了什么?

【问题讨论】:

  • 你可以尝试重命名第一个吗?
  • 如果我重命名它仍然会崩溃。我的意思是,例如,如果我将 darkGreenColor 更改为第一个变量/属性,那么 Settings.darkGreenColor 会导致崩溃,而不是 settings.grayBorderColor。似乎任何属性首先总是崩溃。
  • 可能是 Xcode 的 bug,你的代码是对的。
  • 发布 Xcode 抛出的完整错误
  • 没有真正的错误,它只是崩溃并说“(lldb)”。但是在Thread列表下,第一项是:“0 Settings.grayBorderColor.unsafeMutableAddressor”

标签: ios swift static-members


【解决方案1】:

将您的代码更改为:

class Settings {

    // MARK: Properties

    static let grayBorderColor: UIColor! = UIColor(red: 0.76, green: 0.76, blue: 0.76, alpha: 1.0)
    static let lightGreenColor: UIColor! = UIColor(red: 0.66, green: 1.0, blue: 0.66, alpha: 1.0)
    static let darkGreenColor: UIColor! = UIColor(red: 0.66, green: 0.0, blue: 0.0, alpha: 1.0)
    static let darkRedColor: UIColor! = UIColor(red: 0.66, green: 0.0, blue: 0.0, alpha: 1.0)
    static let lightRedColor: UIColor! = UIColor(red: 1, green: 0.66, blue: 0.66, alpha: 1.0)
    static let lightGrayColor: UIColor! = UIColor.lightGrayColor()
    static let mediumGrayColor: UIColor! = UIColor.darkGrayColor()

}

您缺少属性类型。如文档中所述,计算属性应具有类型说明符。

【讨论】:

  • 你试过把 let 改成 var 吗?
  • 这些不是计算属性,它们是存储属性。不需要类型说明符。
猜你喜欢
  • 2012-04-15
  • 2012-09-20
  • 2012-06-23
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
相关资源
最近更新 更多