Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;非void函数应返回一个值";当在Swift 4.2中捕获自身时,在函数中关闭guard语句_Swift_Rx Swift_Self - Fatal编程技术网

&引用;非void函数应返回一个值";当在Swift 4.2中捕获自身时,在函数中关闭guard语句

&引用;非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() } } 尝试将返回

我们如何在返回类型的函数中使用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()
    }
}
尝试将返回类型设为可选,如果没有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 */ }
    }
}