我正在尝试将我具有结构的 JSON 附加到数组,但它给了我错误:
Cannot convert value of type '[String:Any]' to expected argument type '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
}
]
}
最佳答案
您需要将 Dictionary 转换为 WeerItem 对象。由于您已经实现了自定义初始化程序,因此您可以直接调用它。
for weerData in json {
self.weerItems.append(WeerItem(dictionary:weerData))
}
如果您使用的是 Swift 4,您应该使 WeerItem 符合 Decodable,然后您就不需要自定义初始化器了。
关于json - 无法将我的 JSON 附加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47909104/
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby数组,我们在StackOverflow上找到一
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
我正在使用puppet为ruby程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳