【问题标题】:Swift: how to declare a strong reference to reference self in a closureSwift:如何在闭包中声明对引用 self 的强引用
【发布时间】:2014-12-11 16:40:01
【问题描述】:

我想从 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。我不想使用弱/无主引用,而是强引用,但我不知道 如何声明:

这适用于弱引用(对于 unowned 类似):

[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

【问题讨论】:

    标签: swift closures


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      相关资源
      最近更新 更多