最初我将数组声明为:
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
}
}