这是 JSON:
{
"main":{
"temp":-11.67,
"pressure":1040.21,
"humidity":73,
"temp_min":-11.67,
"temp_max":-11.67,
"sea_level":1055.37,
"grnd_level":1040.21
},
"id":3099213,
"name":"London",
"cod":200
}
我有 JSON 文件,我想获取
"name": "London" (London)
的值并将其保存在变量 cityName 中,但它不起作用,第 self.cityName = city
行中有错误。 无法将类型 [String : AnyObject]
的值分配给类型 String!
例如,下一个必须从 JSON 保存到不同程度的温度才能正确工作并显示温度。
我不知道如何选择这个
"name":"London"
值并将其保存到变量中。
当我修改并放置此内容时:self.cityName = city as! String
我收到警告从
'[String : AnyObject]'
转换为不相关类型 'String'
总是失败:
var cityName: String!
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : AnyObject]
if let main = json["main"] as? [String : AnyObject] {
if let temp = main["temp"] as? Int {
self.degree = temp
}
}
if let city = json["name"] as? [String : AnyObject] {
self.cityName = city
}
}
if let city = json["name"] as? [String : AnyObject] {
self.cityName = city
}
替换为
if let city = json["name"] as? String {
self.cityName = city
}
当前您正在尝试将
cityName
类型的 String
与 city
类型的 [String:AnyObject]
分配。在分配给 String
之前先转换为 cityName
,如下所示:
var cityName: String!
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : Any]
if let main = json["main"] as? [String : Any],
let temp = main["temp"] as? Int {
self.degree = temp
}
if let city = json["name"] as? String {
self.cityName = city
}
请注意,我还用
[String : AnyObject]
替换了 [String : Any]
,这是“任何”值类型的基于字符串的键值字典对象的 Swift 标准。我还通过在语句之间使用 if let
在一个条件中展开多个值来删除多余的 ,
嵌套。