繁体   English   中英

Swift:如何在闭包中声明对引用自身的强引用

[英]Swift: how to declare a strong reference to reference self in a closure

我想从Alamofire发出请求,并使用该类的某些方法来处理响应。 什么有效:

// inside a class that has _handleError, _handleServerError
//and handleJsonResponse methods
func connect() {
    let me = self
    Alamofire.request(.GET,
        "http://httpbin.org/get")
    .responseJSON { (request, response, json, error) in
        if let errorInstance = error? {
            me._hanldeError(errorInstance)
            return
        }
        if response!.statusCode != 200 {
            me._handleServerError(response!)
            return
        }
        me._handleJsonResponse(json!)
    }
}

很好,但我与我之间有一种奇怪的爱恨关系, let me = self ,我希望能够在那里使用self。 我不想使用一个弱的/无主的引用,但是要使用一个强的引用,但是我不知道如何声明它:

这对于较弱的参考很有用(对于未拥有者,情况类似):

[weak self] (request, response, json, error) in

这不起作用:

[self] (request, response, json, error) in

这都不是:

[strong self] (request, response, json, error) in

有趣的是,该消息是: Expected "strong", "weak" or "unowned" specifier in capture list

答案可能比问题更有趣:如果您想要的是对自我的强烈引用(也许我做了太多的JavaScript),甚至不用理会,它已经在这里。

// inside a class that has _handleError, _handleServerError
//and handleJsonResponse methods
func connect() {
    Alamofire.request(.GET,
        "http://httpbin.org/get")
    .responseJSON { (request, response, json, error) in
        if let errorInstance = error? {
            self._hanldeError(errorInstance)
            return
        }
        if response!.statusCode != 200 {
            self._handleServerError(response!)
            return
        }
        self._handleJsonResponse(json!)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM