簡體   English   中英

如何將可選的NSInteger轉換為非可選的NSInteger?

[英]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,所以

  1. 我在轉換中缺少一些簡單的東西嗎?
  2. 是否有更好的方法從設置中檢索NSInteger?

將可為空的值轉換為不可為空的值時,有很多不錯的選擇

但就您而言,您有兩個問題。 一個是您要從NSUserDefaults獲取的數組,是一個整數數組,因此您需要確定要從該數組中選擇哪個數組。

如果是第一個屬性,則可以使用第first屬性。 您可以使用可選的鏈接來獲取它。 而且由於它的得分很高,如果不存在,您可能希望默認為零。

這是一行內容:

let returnValue = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [Int]

let highscore = returnValue?.first ?? 0

關於上述注意事項:如果類型由=右側的內容明確確定,則無需在=的左側提供類型。 而且最好是Int不是NSInteger

所述returnValue?.first說“如果returnValuenil ,則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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM