Swift 返回可观察对象不起作用

Swift 返回可观察对象不起作用,swift,rx-swift,Swift,Rx Swift,我只是在玩RxSwift,以便更好地理解这些概念。我正在尝试验证电子邮件。但是,当我返回一个可观察的返回值时,订阅者不会调用。我想这可能有用。有什么建议吗 var emailAddressValid: Observable<String>{ return self.userEmailAddress.asObservable().filter({ (userEmail) -> Bool in userEmail.count > 0

我只是在玩RxSwift,以便更好地理解这些概念。我正在尝试验证电子邮件。但是,当我返回一个可观察的返回值时,订阅者不会调用。我想这可能有用。有什么建议吗

var emailAddressValid: Observable<String>{
        return self.userEmailAddress.asObservable().filter({ (userEmail) -> Bool in
            userEmail.count > 0
        }).flatMap({ (userEmail) -> Observable<String> in
            if userEmail == "abcd@gmail.com"{
                //This works perfectly
                return .just("007")
            } else {
                let emailDomain = userEmail.components(separatedBy: "@").last
                if emailDomain != nil {
                    //nothing happens in onNext
                    //This returns back an Observable<String>
                    return DataService.instance.checkDomainIsRegistered(domainName: emailDomain!)
                } else {
                    return .just("0")
                }
            }
        })
    }
var emailAddressValid:可观察{
返回self.userEmailAddress.asObservable().filter({(userEmail)->Bool-in
userEmail.count>0
}).flatMap({(userEmail)->在
如果userEmail==”abcd@gmail.com"{
//这很好用
return.just(“007”)
}否则{
让emailDomain=userEmail.components(以“@”分隔)。最后
如果emailDomain!=nil{
//onNext中没有发生任何事情
//这将返回一个可观察的
return DataService.instance.checkDomainIsRegistered(域名:emailDomain!)
}否则{
return.just(“0”)
}
}
})
}
尽管这个应用程序可以工作。但是,也没有任何编译器错误。但是当我返回DataService.instance.checkDomainIsRegistered(域名:emailDomain!)时,Observer中的onNext不起作用

func checkDomainIsRegistered(域名:字符串)->可观察{
打印(域名)
返回可观察的。在中创建{数据
self.\u REF\u DOMAIN\u NAMES.queryOrdered(byChild:“domainName”).queryQual(toValue:domainName).observeSingleEvent(of:.value,其中:{(domainNameSnapshot))在
if(domainNameSnapshot.exists()){
打印(“1”)
data.onNext(“1”)
}否则{
打印(“0”)
data.onNext(“0”)
}
},withCancel:{(错误)在
data.onError(错误)
})
data.onCompleted()
返回一次性物品。创建()
}
}

在您的示例中,调用

self._REF_DOMAIN_NAMES.queryOrdered(byChild: "domainName")
    .queryEqual(toValue: domainName)
    .observeSingleEvent(of: .value, with: { (domainNameSnapshot) in })
很可能被分派到后台线程或队列

同时,您的Observable
checkDomainIsRegistered
然后使用
data.onCompleted()
完成,同时可能在主线程上运行


结果是永远不允许调用
onNext()
。您可以通过临时删除
onCompleted()

来验证是否发生了这种情况,如果调用
数据,则会导致错误(error)
,事件流可能会中断。你应该抓住那个

self._REF_DOMAIN_NAMES.queryOrdered(byChild: "domainName")
    .queryEqual(toValue: domainName)
    .observeSingleEvent(of: .value, with: { (domainNameSnapshot) in })