2017-01-02 59 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