swift 中的 NSMutableArray 和 NSArray

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 打交道?为什么还要 <=?数组可以有 negative 长度吗?你应该这样做:

// start empty
var wrongAnswers = [String]()
... // app might append wrong answers to the array

// Later check:
wrongAnswersLabel.isHidden = wrongAnswers.isEmpty // done!

更好:
或者您可以 "react" 通过使用 Swift "property observer" 来更改数组,例如"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
    }
}