我在使用init()
时遇到了以下问题,有谁能帮我解决吗?
@State private var activity: [ResponseActivity] = [ResponseActivity()]
func getActivity(completion: @escaping ([ResponseActivity]?) -> ()){
var userInfo: [ResponseActivity] = [ResponseActivity()]
let url = URL(string: "https://api.github.com/users/\(self.userInfo.login)/received_events")!
let urlRequest = URLRequest(url: url)
print("self.userInfo.login", self.userInfo.login)
let task = URLSession.shared.dataTask(with: urlRequest) { data, urlResponse, error in
guard let content = data else {
print("Error getting data from API.")
return
}
do {
userInfo = try JSONDecoder().decode([ResponseActivity].self, from: content)
} catch {
print("Error parsing URL from data Activity.")
return
}
completion(userInfo)
}
task.resume()
}
发布于 2021-07-15 05:44:50
像这样的struct
(View
)中的属性是不可变的。您可以在init
中设置初始值,但之后它们就不再是可变的。像@State
这样的特殊属性包装器允许您稍后更改值,但您尝试使用_activity = State(...)
在struct
上设置实际值。
我建议将这样的异步代码转移到ObservableObject
中--然后,您将拥有一个具有可变属性的class
。这意味着您的userInfo
、isLogin
等将是@Published
属性,并且可能需要是可选的,因为它们在getActivity
完成之前不会有值。
https://stackoverflow.com/questions/68385329
复制相似问题