swift - 结构内部的变异函数
问题描述
我正在使用 Swift 4,我有一个使用默认值初始化的结构。我在里面创建了一个函数,它应该读取 JSON 并用它得到的内容更改这些默认值,但它似乎不起作用。
错误:闭包不能隐式捕获变异的自我参数
代码:
struct Workspace: Decodable {
var guid: String
var name: String
private enum CodingKeys : String, CodingKey {
case guid = "guid"
case name = "name"
}
init(){
self.guid = "blbl"
self.name = "oops"
}
mutating func getUserWorkspace(base: String, completed: @escaping () -> ()){
let url = URL(string: "some url")!
var request = URLRequest(url: url)
request.addValue("Basic \(base)", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Accept")
URLSession.shared.dataTask(with: request){ (data, response, error) in
if error == nil {
do {
let res: Workspace = try JSONDecoder().decode(Workspace.self, from: data!)
self.guid = res.guid //Error here
self.name = res.name //Error here
DispatchQueue.main.async {
completed()
}
}catch {
print ("JSON error")
}
}
}.resume()
}
我将 let 更改为 var,但我想还有一些我不明白的地方..
解决方案
//Try this one and let me know
struct Workspace: Decodable {
static var shared = Workspace()
var guid: String
var name: String
private enum CodingKeys : String, CodingKey {
case guid = "guid"
case name = "name"
}
init(){
self.guid = "blbl"
self.name = "oops"
}
mutating func getUserWorkspace(base: String, completed: @escaping () -> ()){
let url = URL(string: "some url")!
var request = URLRequest(url: url)
request.addValue("Basic \(base)", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Accept")
URLSession.shared.dataTask(with: request){ (data, response, error) in
if error == nil {
do {
let res: Workspace = try JSONDecoder().decode(Workspace.self, from: data!)
Workspace.shared.guid = res.guid //Error here
Workspace.shared.name = res.name //Error here
DispatchQueue.main.async {
completed()
}
}catch {
print ("JSON error")
}
}
}.resume()
}
}
推荐阅读
- python - 使用 python 进行 jacobi 迭代时如何处理此错误
- android - 裸博览会应用程序在发布时崩溃并出现致命异常
- arduino - 如何解密 arduino IR sendRC5()?
- android - 由于 androidx.core 库不匹配,无法构建项目
- python - 无法使用 BLE pygatt 回调函数连续读取数据
- amazon-web-services - 凭证中的 Boto3 账户 ID 与 IAM 用户不匹配
- java - 如何解决“无法连接到命令度量流”。对于带有 Spring Boot 2.3.12 和 Java 11 的 Hystrix?
- firebase - 为什么传票有误?意外的空值
- javascript - 是否可以使用代理来包装带有错误处理的异步方法调用?
- python - Leetcode 二和:在列表中返回错误索引的问题