2017-06-22 42 views
1

起初,我宣佈我的數組:的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)任何方式來解決這個運行時錯誤?

任何與此相關的文檔都會有所幫助。

回答

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

+1

謝謝!它使整個代碼更簡單。之前我使用'?'到處。我是新來的迅速。我會按照你發送的文件。 –

+0

這個答案並非如此「Swifty」,並且不必要的冗長。你應該使用我的「Swiftier」和更具反應性的答案:https://stackoverflow.com/a/44694853/1311272 – Sajjon

+0

幾個註釋:三元包含'? true:false'不需要存在(只是使用條件來代替),爲什麼數組的元素少於零(使用'wrongAnswersArray.isEmpty'或類似的方法)? – Aehmlo

1

爲什麼用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 
    } 
}