[英]“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.