簡體   English   中英

在Swift 4.2保護函數中的閉包中捕獲Self時,“非空函數應返回值”

[英]“Non-void function should return a value” when capturing Self in Swift 4.2 guard statement in closure in function

我們如何使用Swift 4.2樣式在返回類型的函數的閉包中捕獲自身?

例如:

func checkEmailExists(_ email: String) -> Observable<Bool> {
    return Observable.create { [weak self] observer in
        guard let self = self else { return }
        self.callAPI()
    }
}

這會產生錯誤。 Non-void function should return a value但也不應return false因為這會影響函數調用的結果。

編輯:另一個示例,拋出Non-void function should return a value

func loginWithCredentials() -> Observable<User> {
    return Observable.create { [weak self] observer in
        guard let self = self else { return }

        let decoder = JSONDecoder()
        let json = ["id": 1, "name": "John Doe", "email": "john@doe.com"] as [String: Any]

        do {
            let user = try decoder.decode(User.self, from: json.jsonData()!)
            observer.onNext(user) // Simulation of successful user authentication.
        } catch {
            print("error")
        }

        return Disposables.create()
    }
}

無論如何,您都必須退回一次性用品。

func checkEmailExists(_ email: String) -> Observable<Bool> {
    return Observable.create { [weak self] observer in
        guard let self = self else { return Disposables.create() }
        // and so on...
        return Disposables.create { /* cancelation code */ }
    }
}

不過,這感覺非常錯誤。 您的函數callAPI() 本身應返回某種Observable,這會使該函數毫無意義。

嘗試將make返回類型設置為可選 ,如果沒有self ,則返回nil

要么

您可以使用?調用方法來避免此guard聲明? 像這樣的標志:

self?.callAPI()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM