程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Swift ui 转义闭包捕获变异的“self”参数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Swift ui 转义闭包捕获变异的“self”参数?

开发过程中遇到Swift ui 转义闭包捕获变异的“self”参数的问题如何解决?下面主要结合日常开发的经验,给出你关于Swift ui 转义闭包捕获变异的“self”参数的解决方法建议,希望对你解决Swift ui 转义闭包捕获变异的“self”参数有所启发或帮助;

我在 init() 中使用时遇到以下问题,有人能帮我吗?

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

    @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()
    }

解决方法

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

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

大佬总结

以上是大佬教程为你收集整理的Swift ui 转义闭包捕获变异的“self”参数全部内容,希望文章能够帮你解决Swift ui 转义闭包捕获变异的“self”参数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。