引用闭包中的属性需要显式的“自我”使捕获语义明确

【字号: 日期:2024-04-13浏览:29作者:雯心
(adsbygoogle = window.adsbygoogle || []).push({}); 如何解决引用闭包中的属性需要显式的“自我”使捕获语义明确?

在回答这个问题之前,您必须知道什么是存储周期。请参阅根据Apple的文档解决类实例之间的强引用循环

现在您知道什么是内存周期:

该错误是Swift编译器告诉您

“嘿,NSURLSession 关闭 正在尝试 webviewHTML 在堆中,因此 ==>创建了一个内存循环,我认为克拉克先生不想在这里。想像一下,如果我们发出一个需要花费很长时间的请求,然后用户进行导航离开这个页面。它不会离开堆。我只是告诉 你,但是,克拉克先生必须为自身创建一个弱引用,并 在闭包中 使用它。”

我们使用创建(即捕获) 弱 引用[weak self]。我强烈建议您查看附件中有关捕获含义的链接。

有关更多信息,请参阅斯坦福课程的这一刻。

func post(url: String, params: String) { let url = NSURL(string: url) let params = String(params); let request = NSMutableuRLRequest(URL: url!); request.HTTPMethod = 'POST' request.HTTPBody = params.dataUsingEncoding(NSUTF8StringEncoding) let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {[weak weakSelf self] data, response, error inif error != nil { print('error=(error)') return}var responseString : Nsstring!;responseString = Nsstring(data: data!, encoding: NSUTF8StringEncoding)weakSelf?.webviewHTML.loadHTMLString(String(responseString), baseURL: nil)// USED `weakSelf?` INSTEAD OF `self` } task.resume();}解决方法

尝试将HTML从Web服务加载到Webview中时,出现以下错误:

在闭包中引用属性“ webviewHTML”需要显式的“自我”。使捕获语义明确

这是什么意思,如何将HTML字符串加载到Web视图中?

func post(url: String,params: String) { let url = NSURL(string: url) let params = String(params); let request = NSMutableURLRequest(URL: url!); request.HTTPMethod = 'POST' request.HTTPBody = params.dataUsingEncoding(NSUTF8StringEncoding) let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {data,response,error inif error != nil { print('error=(error)') return}var responseString : NSString!;responseString = NSString(data: data!,encoding: NSUTF8StringEncoding)webviewHTML.loadHTMLString(String(responseString),baseURL: nil) } task.resume();}

相关文章: