swift – 关闭时对属性的引用需要明确的“自我”.使捕获语义显式
尝试将
HTML从Web服务加载到webview中,我收到此错误:
它是什么意思,我如何将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 in if error != nil { print("error=(error)") return } var responseString : NSString!; responseString = NSString(data: data!,encoding: NSUTF8StringEncoding) webviewHTML.loadHTMLString(String(responseString),baseURL: nil) } task.resume(); }
在回答这个问题之前,你必须知道记忆周期是什么.见
Resolving Strong Reference Cycles Between Class Instances From Apple’s documenation
现在你知道什么是内存周期了: 那个错误是Swift编译器告诉你的
我们使用[弱自我]创建(即capture)弱引用.我强烈建议您查看附加链接的捕获方式. 欲了解更多信息,请参阅斯坦福大学课程this moment. 正确的代码 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,encoding: NSUTF8StringEncoding) weakSelf?.webviewHTML.loadHTMLString(String(responseString),baseURL: nil) // USED `weakSelf?` INSTEAD OF `self` } task.resume(); } 有关详细信息,请参阅此Shall we always use [unowned self] inside closure in Swift (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |