【问题标题】:NSMutableArray and NSArray in swiftswift 中的 NSMutableArray 和 NSArray
【发布时间】:2017-06-22 08:32:08
【问题描述】:

最初我将我的数组声明为:

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) 有什么办法可以解决这个运行时错误?

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

【问题讨论】:

    标签: ios swift nsmutablearray nsarray


    【解决方案1】:

    使用[String]swift-array 一样,将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获得帮助

    【讨论】:

    • 谢谢!!它使整个代码更简单。早些时候我使用的是'?到处。我是新来的。我会按照您发送的文件进行操作。
    • 这个答案不是那么“迅速”,而且是不必要的冗长。你应该使用我的“Swiftier”和更被动的答案:stackoverflow.com/a/44694853/1311272
    • 一些注意事项:包含? true : false 的三元组不需要存在(只使用条件代替),为什么数组的元素少于零(使用wrongAnswersArray.isEmpty 或类似代替) ?
    【解决方案2】:

    为什么要和array.count &lt;= 0 ? true : false 纠缠不清?为什么还要&lt;=?数组可以有 长度吗?你应该这样做:

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

    更好:
    或者您可以通过使用 Swift“属性观察者”来“响应”对数组的更改,例如“将设置”:

    // 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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      相关资源
      最近更新 更多