Swift:如何在闭包中声明引用self的强引用

时间:2014-12-11 16:40:01

标签: swift closures

我想发起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有一种奇怪的爱/恨关系,我希望能够在那里使用自己。我不想使用弱/无主参考但是强大的参考,但我不知道 如何申报:

这适用于弱参考(对于无主的类似事物):

[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

1 个答案:

答案 0 :(得分:0)

答案可能比问题更有趣:如果你想要的是对自我的强烈引用(也许我做了太多的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!)
    }
}