我在使用资源结构时遇到了一段时间。
enum HttpMethod<Body> {
case get
case post(Body)
}
struct Resource<A> {
let url: URL
let method: HttpMethod<Data>
let parse: (Data) -> A?
}
extension Resource {
init(url: URL, method: HttpMethod<Any> = . get, parseJSON: @escaping (Any) -> A?) {
self.url = url
self.method = method.map { json in
// TODO: try! is not safe here anymore
return try! JSONSerialization.data(withJSONObject: json, options: [])
}
self.parse = { data in
let json = try? JSONSerialization.jsonObject(with: data, options: [])
return json.flatMap(parseJSON)
}
}
}
来自:
func pushNotification(token: String) -> Resource<Bool> {
let url = URL(string: "")!
let dictionary = ["token": token]
return Resource(url: url, method: .post(dictionary), parse: { _ in
return true
}) //** my mistake was on this line (see below)
}
然后我收到以下错误消息:
Networking.playground / Pages / Step 10.xcplaygroundpage:118:40:会员&#39;发布&#39;在&#39; HttpMethod&lt; Data&gt;&#39;生成类型&#39; HttpMethod&lt; Body&gt;&#39;的结果,但上下文需要&#39; HttpMethod&lt; Data&gt;&#39;
我花了一些时间才意识到我已经为Resource结构调用了成员初始化器:init(url:method:parse :),而我应该调用自定义初始化器:init(url:method:parseJSON:)
(注意:自从我们在扩展中添加自定义初始化程序后,成员初始化程序仍然存在)
回想起来,我想,如果我使用了Symbol Navigator,我可能会早点发现我的错误。但是在花了一些时间在Xcode之后,我无法弄清楚如何查看Swift Playground的符号导航器。它总是空着的。
我检查了我的其他Xcode swift项目,符号导航器正常工作。
有人知道我们怎么能让符号导航器在Xcode Swift Playground中正常工作?