为什么在转换为整数时将此字符串打印为Nil?

时间:2017-01-02 18:23:32

标签: json swift

在下面的代码片段中,我调用了一个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

我想在我的应用程序中以百分比显示此值,因此在Swift中我想将它乘以100.请不要问我为什么不在PHP中这样做,因为我正在尝试学习Swift并希望了解未来参考的过程。

我的理解是,在下面的代码片段中存储winPercentage的值时,它会在tempMostWinsAgainstNumber中存储为字符串。

当我尝试将其转换为整数(然后执行数学运算)并打印该值时,它会打印nil

为什么会这样?

如何将存储在`[“winPercentage”]中的值转换为整数,以便将它乘以100?

1 个答案:

答案 0 :(得分: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)