发布
社区首页 >问答首页 >Swift ui转义闭包捕获变异的“self”参数

Swift ui转义闭包捕获变异的“self”参数
EN

Stack Overflow用户
提问于 2021-07-15 05:32:15
回答 1查看 74关注 0票数 0

我在使用init()时遇到了以下问题,有谁能帮我解决吗?

代码语言:javascript
代码运行次数:0
复制
    @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()
    }
EN

回答 1

Stack Overflow用户

发布于 2021-07-15 05:44:50

像这样的struct (View)中的属性是不可变的。您可以在init中设置初始值,但之后它们就不再是可变的。像@State这样的特殊属性包装器允许您稍后更改值,但您尝试使用_activity = State(...)struct上设置实际值。

我建议将这样的异步代码转移到ObservableObject中--然后,您将拥有一个具有可变属性的class。这意味着您的userInfoisLogin等将是@Published属性,并且可能需要是可选的,因为它们在getActivity完成之前不会有值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68385329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档