將空值轉換爲非空值時,有many good options to choose from。
但在你的情況下,你有兩個問題。其中一個是你從NSUserDefaults
獲取的數組是一個整數數組,所以你需要決定從數組中選擇哪一個。
如果這是您需要的第一個,您可以使用first
屬性。你可以使用可選的鏈接來獲取它。而且由於它的得分很高,如果它不存在,你可能想要默認爲零。
下面是在一行:
let returnValue = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [Int]
let highscore = returnValue?.first ?? 0
事情需要注意上述:有沒有必要給類型的=
的左側,如果該類型明確由什麼綠水青山權確定=
。 Int
優於NSInteger
。
的returnValue?.first
說「如果returnValue
是nil
,然後nil
,的first
(如果該數組爲空時,它本身,則返回nil
)。否則該值」的??
說「如果??
左邊是nil
,則值在nil
的右側,否則從左側展開的值「。
這就是說 - 你真的想要存儲數組嗎?或者你真的只想在默認值中存儲一個整數,然後直接將其取出?
let highscore = NSUserDefaults.standardUserDefaults().integerForKey("food")
// and elsewhere in your code, when saving
NSUserDefaults.standardUserDefaults().setInteger(highscore, forKey: "food")
(integerForKey
已經返回0默認情況下不存在,而不是一個可選的,因此不需要任何解包)
您應該使用的,而不是NSInteger的的 –
可能重複INT [在斯威夫特,我該怎麼辦避免選項和零對象引用?](http://stackoverflow.com/questions/27622871/in-swift-how-do-i-avoid-both-optionals-and-nil-object-references) – nhgrif
有沒有你想使用NSInteger而不是Int的具體原因? – Bas