2017-09-16 81 views
0

這裏設置的價格爲用戶默認(LoggedInUserSave是參考UserDefault):類型轉換成userdefaults INT()在迅速

let currentValue = Int(sender.value) 
LblPriceValue.text = "\(currentValue)" 
Price = "0," + String(describing: currentValue) 
LoggedInUserSave.set(Price, forKey: "PriceFilter") 

我需要使用priceInt。我使用這個代碼轉換的priceint

p = LoggedInUserSave.value(forKey: "PriceFilter") as! String 
Price : Int = Int(p)! 

雖然做這件事情讓零值。

+0

對不起,什麼是'價格:INT = INT(P)'!?我甚至無法編譯。 – GreatBigBore

+0

價格只是變量來存儲p的價值 – m123

+0

好,但我在談論這種語法。我不知道它是什麼意思,也不會編譯。如果您發佈了您使用的實際代碼,則可以獲得更好的質量幫助。 – GreatBigBore

回答

0

有幾種異常情況(不包括錯誤使用命名的課程公約)在你的代碼,因爲我可以看到,這條線(當設置值)描繪了VAR Price是一種String

Price = "0," + String(describing: currentValue) 

凡爲這裏(當收到價值時)你設置爲Priceinteger

現在所以解決您的問題,確保:

  • sender.value不是零,只包含數字字符(否則強制類型轉換將不會成功)
  • 現在同時節省你喜歡"0," + String(describing: currentValue)這使得它設置是string文字,不能再次轉換爲Int

這將是更合適的方式來實現你想什麼:

if let i = sender.value as? Int { 
     self.lbl.text = "\(i)" 
     UserDefaults.standard.set(i, forKey: "Key") 
    } 

_

//.. 
    if let i : Int = UserDefaults.standard.integer(forKey: "Key") { 
     //do what you want to do with stored value 
    } 
+0

它給這樣的錯誤無法將類型'NSTaggedPointerString'(0x10d978d60)的值轉換爲'NSNumber'(0x10e94d4a8)。 – m123

+1

不要使用'value(forKey:)'方法從UserDefaults讀取值。要得到一個'Int',使用'integer(forKey:)'。 – rmaddy

+0

'integer(forKey:)'不返回可選項。 – rmaddy