我正在尝试将我的JSON追加到数组,但它给了我错误:
无法将'[String:Any]'类型的值转换为预期的参数类型'WeerItem'
WeerItem就是这样:
import Foundation
struct WeerItem : CustomStringConvertible {
var description: String
let city : City?
let cod : Int?
let message : Double?
let cnt : Int?
let list : [List]?
init(dictionary: [String: Any]) {
self.city = dictionary["city"] as? City ?? nil
self.cod = dictionary["cod"] as? Int ?? 0
self.message = dictionary["message"] as? Double ?? 0.0
self.cnt = dictionary["cnt"] as? Int ?? 0
self.list = dictionary["list"] as? [List] ?? nil
}
}
这就是我调用JSON并将其添加到列表中的方式
var weerItems : [WeerItem] = []
let task = session.dataTask(with: request as URLRequest,
completionHandler: { data, response, error -> Void in
do {
if let json = try JSONSerialization.jsonObject(with: data!) as? [[String: Any]] {
for weerData in json {
self.weerItems.append(weerData) //This line gives the error
}
}
} catch { print(error) }
})
task.resume()
示例JSON:
{
"city":{
"id":3080866,
"name":"Zakopane",
"coord":{
"lon":19.9507,
"lat":49.2969
},
"country":"PL",
"population":27580
},
"cod":"200",
"message":43.5092521,
"cnt":6,
"list":[
{
"dt":1513764000,
"temp":{
"day":-4,
"min":-9.63,
"max":-4,
"night":-9.63,
"eve":-7.41,
"morn":-4
},
"pressure":924.37,
"humidity":78,
"weather":[
{
"id":600,
"main":"Snow",
"description":"light snow",
"icon":"13d"
}
],
"speed":0.91,
"deg":339,
"clouds":36,
"snow":0.63
},
{
"dt":1513850400,
"temp":{
"day":-11.69,
"min":-15.84,
"max":-6.47,
"night":-6.47,
"eve":-6.71,
"morn":-14.78
},
"pressure":923.24,
"humidity":83,
"weather":[
{
"id":601,
"main":"Snow",
"description":"snow",
"icon":"13d"
}
],
"speed":1.01,
"deg":190,
"clouds":76,
"snow":2.73
},
{
"dt":1513936800,
"temp":{
"day":-3.4,
"min":-8.82,
"max":-2.63,
"night":-3.69,
"eve":-6.33,
"morn":-3.8
},
"pressure":923.89,
"humidity":93,
"weather":[
{
"id":601,
"main":"Snow",
"description":"snow",
"icon":"13d"
}
],
"speed":1.17,
"deg":309,
"clouds":48,
"snow":1.54
},
{
"dt":1514023200,
"temp":{
"day":-3.33,
"min":-5.25,
"max":-2.68,
"night":-2.68,
"eve":-5.01,
"morn":-2.94
},
"pressure":920.7,
"humidity":89,
"weather":[
{
"id":601,
"main":"Snow",
"description":"snow",
"icon":"13d"
}
],
"speed":2.93,
"deg":341,
"clouds":76,
"snow":5.34
},
{
"dt":1514109600,
"temp":{
"day":2.53,
"min":2.04,
"max":4.52,
"night":4.52,
"eve":3.25,
"morn":2.04
},
"pressure":947.42,
"humidity":0,
"weather":[
{
"id":600,
"main":"Snow",
"description":"light snow",
"icon":"13d"
}
],
"speed":5.23,
"deg":305,
"clouds":68,
"rain":3.79,
"snow":0.98
},
{
"dt":1514196000,
"temp":{
"day":3.68,
"min":-3.88,
"max":3.71,
"night":-3.88,
"eve":0.81,
"morn":3.71
},
"pressure":951.34,
"humidity":0,
"weather":[
{
"id":500,
"main":"Rain",
"description":"light rain",
"icon":"10d"
}
],
"speed":3.1,
"deg":270,
"clouds":27,
"rain":0.47
}
]
}
答案 0 :(得分:3)
您需要将Dictionary转换为WeerItem
对象。由于您已经实现了自定义初始化程序,因此您可以调用它。
for weerData in json {
self.weerItems.append(WeerItem(dictionary:weerData))
}
如果您使用的是Swift 4,则应WeerItem
符合Decodable
,然后您就不再需要自定义初始化程序。