2017-01-02 61 views
1

在下面的代碼片段中,我調用API從數據庫中檢索一些數據。爲什麼這個字符串轉換爲整數打印爲無?

let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject] 

if let dict = json?["personalLeagueStats"] as? [String:AnyObject] { 
    if let dataMostWinsAgainst = dict["leaguePersonalMostWinsAgainst"] as? [[String : AnyObject]] { 
     let newdictMostWinsAgainst = dataMostWinsAgainst.first! 
     let tempMostWinsAgainstUserName = newdictMostWinsAgainst ["member"] as? String 
     let tempMostWinsAgainstNumber = newdictMostWinsAgainst ["winPercentage"] as? String 
     let temp2number = Int(tempMostWinsAgainstNumber!) 
     print (temp2number) 
     self.mostWinsAgainstPlayer.text = tempMostWinsAgainstUserName 
    } 
} 

的數據(winPercentage)我相信我的SQL語句返回例如值0.67

我想這樣的斯威夫特我想顯示在我的應用程序這個值作爲一個百分比存儲爲整數將它乘以100.請不要問我爲什麼不在PHP中這樣做,因爲我正在學習Swift,並且想知道該過程以備將來參考。

我的理解是,在下面的winPercentage的值被存儲的片段中,它被存儲爲tempMostWinsAgainstNumber中的字符串。

當我嘗試將其轉換爲整數(然後執行數學運算)並打印它打印的值nil

這是爲什麼?

如何將存儲在[[「winPercentage」]中的值轉換爲整數,以便將其乘以100?

+3

'0.67'絕對不是一個整數。 – vadian

回答

1

您需要將0.67轉換爲Double而不是Int

let tempMostWinsAgainstNumber = newdictMostWinsAgainst ["winPercentage"] as? String 
guard let temp2number = Double(tempMostWinsAgainstNumber) else { 
    // the String could not be converted to a Double 
} 
print(temp2number) 
+1

謝謝,這工作 - 爲什麼我們在這種情況下使用'警衛'? – RDowns

+1

「String」不可轉換爲「Double」。這個'Double'的初始化器是failable的,這意味着它返回一個'Optional'版本('Double?')。 'guard'語句只是安全打開這個可選值的一種方法。 – nathan

+1

如果你像以前一樣用'!'強制打開可選項,如果'String'不能轉換爲'Double',則應用程序會崩潰。 – nathan