簡體   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