&引用;非void函数应返回一个值";当在Swift 4.2中捕获自身时,在函数中关闭guard语句
我们如何在返回类型的函数中使用Swift 4.2风格的在闭包中捕获self 例如:&引用;非void函数应返回一个值";当在Swift 4.2中捕获自身时,在函数中关闭guard语句,swift,rx-swift,self,Swift,Rx Swift,Self,我们如何在返回类型的函数中使用Swift 4.2风格的在闭包中捕获self 例如: func checkEmailExists(_ email: String) -> Observable<Bool> { return Observable.create { [weak self] observer in guard let self = self else { return } self.callAPI() } } 尝试将返回
func checkEmailExists(_ email: String) -> Observable<Bool> {
return Observable.create { [weak self] observer in
guard let self = self else { return }
self.callAPI()
}
}
尝试将返回类型设为可选,如果没有self,则返回nil
或
通过使用?
符号调用方法,可以避免此guard
语句,如:
self?.callAPI()
在任何情况下,你都必须归还一次性用品
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 */ }
}
}
func checkEmailExists(email:String)->可观察{
返回可观察的。在中创建{[弱自我]观察者
guard let self=self-else{return Disposables.create()}
//等等。。。
返回一次性物品。创建{/*取消代码*/}
}
}
但这感觉很不对。您的函数
callAPI()
本身应该返回某种类型的可观察值,这将使此函数毫无意义。如果它不能为false
,那么您应该将该值设置为可选值,并根据方法的签名返回nil
,您必须在else
子句以及callAPI()
必须返回一个Observable
值。这看起来不像是对Observable.create()的正确使用。何时调用observer.on()
?您认为此代码在做什么?不建议这样做。由于Swift 4.2,建议使用guard let self=self else{return}
。@Blackbeard有文档记录吗?最初的代码太简单了,对不起。我添加了另一个示例。谢谢你的回答!答案是一样的。传递给create的闭包是一个非void函数,必须返回一个一次性函数。你没有这样做,这就是为什么你会得到错误。
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 */ }
}
}