的NSMutableArray和NSArray的斯威夫特
问题描述:
起初,我宣布我的数组:的NSMutableArray和NSArray的斯威夫特
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)任何方式来解决这个运行时错误?
任何与此相关的文档都会有所帮助。
答
使用[String]
像swift-array
&使其let
为可变(变量)常量& var
var wrongAnswersArray: [String] = []
wrongAnswerLabel.isHidden = (wrongAnswersArray.count) <= 0 ? true:false
答
为什么用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!
更妙的是:
或者你也可以“反应”来更改阵列,通过使用雨燕“观测财产”,例如“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
}
}
谢谢!它使整个代码更简单。之前我使用'?'到处。我是新来的迅速。我会按照你发送的文件。 –
这个答案并非如此“Swifty”,并且不必要的冗长。你应该使用我的“Swiftier”和更具反应性的答案:https://*.com/a/44694853/1311272 – Sajjon
几个注释:三元包含'? true:false'不需要存在(只是使用条件来代替),为什么数组的元素少于零(使用'wrongAnswersArray.isEmpty'或类似的方法)? – Aehmlo