2017-08-30 19 views
0

我試圖比較一個保存到UserDefaults的值爲一個新的整數,但我無法弄清楚。如何更改UserDefaults中某個值的類型?

func setScore() { 
    let defaults = UserDefaults.standard 
    let newScore = score 
    if defaults.object(forKey: "HighScore") != nil { 
     defaults.set(newScore, forKey: "HighScore") 
     let highScore = defaults.object(forKey: "HighScore") as! Int 
     print(highScore) 
    } else if defaults.object(forKey: "HighScore") < Int(newScore) { 
     defaults.set(newScore, forKey: "HighScore") 
     let highScore = defaults.object(forKey: "HighScore") as! Int 
     print(highScore) 
    } else { 

    } 
} 

我怎樣才能改變從defaults.object(forKey: "HighScore")值是一個整數,這樣我就可以對它們進行比較?

+1

你看過'UserDefaults'的文檔嗎?有閱讀特定類型的方法。 – rmaddy

+0

https://stackoverflow.com/questions/29930736/making-nsuserdefault-of-type-in​​teger-in-swift – toddg

+0

請注意,只有在defaults.object(forKey: 「HighScore」)是零,所以你的比較沒有多大意義。 – Caleb

回答

0

首先,您可以使用UserDefaults.standar.integer(forKey:)來檢索Int類型的值。其次,你應該存儲鑄造值一次,不應該多次檢索(目前你檢索3次而不是1次)。

此外,你的邏輯是有缺陷的。如果檢索值爲nil,則試圖比較​​該值。所以你不只是想比較Any?Int,你試圖比較nilInt

func setScore() { 
    let defaults = UserDefaults.standard 
    let newScore = score 
    if let highScore = defaults.object(forKey: "HighScore") as? Int { 
     print(highScore) 
     if highScore < Int(newScore) { 
      defaults.set(newScore, forKey: "HighScore") 
     } 
    } 
} 

相同的功能,但檢索Int值馬上而無需進行轉換(UserDefaults.integer(forKey:)返回0,如果沒有存儲該密鑰值)。

func setScore() { 
    let newScore = score 
    if UserDefaults.standard.integer(forKey: "HighScore") < Int(newScore) { 
      defaults.set(newScore, forKey: "HighScore") 
     } 
    } 
} 
+0

謝謝,由於某種原因,我認爲我需要零聲明,但我沒有。現在完美運作。 –

相關問題