NSMutableArray and NSArray in swift



最初我将数组声明为:

var wrongAnswersArray: NSArray? = []
wrongAnswerLabel.isHidden = (wrongAnswersArray?.count)! <= 0 ? true:false

我的应用程序运行良好。后来,我需要修改数组,所以我将其声明为可变的,但我不能使用相同的语句来获取计数。XCode建议按以下方式修改语句:

var wrongAnswersArray: NSMutableArray? = []
wrongAnswerLabel.isHidden = (wrongAnswersArray!).count <= 0 ? true:false

这将编译但在运行时失败

1(为什么我们不能使用相同的语句?为什么 NSArray 和 NSMutableArray 的行为不同?

2(有什么方法可以解决此运行时错误吗?

与此相关的任何文档都会有所帮助。

使用像swift-array这样的[String],让它let常量和var可变(变量(

var wrongAnswersArray: [String] = []
wrongAnswerLabel.isHidden = (wrongAnswersArray.count) <= 0 ? true:false

此外,您还可以获得有关 https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html 的帮助

为什么要用array.count <= 0 ? true : false哈塞尔?为什么<=甚至?数组可以有长度吗?您应该改为这样做:

// start empty
var wrongAnswers = [String]()
... // app might append wrong answers to the array
// Later check:
wrongAnswersLabel.isHidden = wrongAnswers.isEmpty // done!

甚至更好:
或者你可以通过使用 Swift "属性观察者"来"响应"数组的更改,例如 "willSet":

// start empty
var wrongAnswers: [String] = [] {
    willSet {
        // Using `willSet` instead of `didSet` allows for use of implicitly declared variable `newValue`
        // which is good since it makes refactoring simpler, not having to refer to the name
        // of this variable (`wrongAnswers`) which we might want to change in the future
        wrongAnswersLabel.isHidden = newValue.isEmpty
    }
}

最新更新