我正在尝试使用Swift 4 Codable
功能来获取JSON,但由于某种原因,它会产生一个错误:
参数类型字符串不符合预期的类型解码器
这是我的代码:
import UIKit
struct aURL : Codable {
let title: String
let aurl: String
// let style: URLStyle
}
class SectionTableViewController: UITableViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
do {
let queue = DispatchQueue(label: "cool")
queue.async {
if let somedata = try? Data(contentsOf: URL(from: "http://json-schema.org/example/geo.json")!, options: []) {
let json = try? JSONSerialization.jsonObject(with: somedata, options: [])
print(json)
DispatchQueue.main.async {
}
}
}
} catch let error as NSError {
print("Error: \(error)")
}
}
如果我尝试使用Xcode修复它,建议修复如图所示:
我收到此错误:
无法将'Swift.String'(0x1015acf68)类型的值转换为'Swift.Decoder'(0x1015ec460)。
答案 0 :(得分:3)
存在误解。
URL
API
init(from decoder: Decoder) throws
可以 在自定义结构中使用来创建来自给定Decoder
的网址,该网址与该类的init(coder
API非常相似相关的NSCoding
协议。
在从字符串创建网址的上下文中,您必须使用URL(string
URL(string: "http://json-schema.org/example/geo.json")!
这正是错误消息所说的内容: 我期待Decoder
但我得到String
重要提示:
从不使用同步API Data(contentsOF:
从远程URL加载数据 - 甚至不在异步调度队列中 - 并且不要随意忽略try?
的错误