[英]How do I convert a optional NSInteger to a non-optional one?
我需要檢索設置(使用Swift):
var highScoreNumber: NSInteger = 0
var returnValue: [NSInteger]? = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [NSInteger]
if (returnValue != nil) {
highScoreNumber = returnValue as NSInteger
}
我嘗試了這段代碼以及其他變體,我總是得到
'NSInteger的?' 不可轉換為“ NSInteger”
這是我第一次嘗試Swift,所以
將可為空的值轉換為不可為空的值時,有很多不錯的選擇 。
但就您而言,您有兩個問題。 一個是您要從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,而不是可選值,因此不需要任何拆包)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.