泛型函数参数给出“表达式类型不明确,没有更多上下文”
Posted
技术标签:
【中文标题】泛型函数参数给出“表达式类型不明确,没有更多上下文”【英文标题】:generic function parameter giving "Expression type is ambiguous without more context" 【发布时间】:2018-11-30 21:04:03 【问题描述】:我有一个函数,它接受两个与 RxSwift 相关的参数并双向绑定它们。
import Foundation
import RxSwift
import RxCocoa
func bibind<T>(property: ControlProperty<T>, variable: Variable<T>) -> Disposable
var updating = false
let bindToUIDisposable = variable.asObservable().filter( _ in
updating = !updating
return updating
).bind(to: property)
let bindToVariable = property.filter( _ in
updating = !updating
return updating
).subscribe(onNext: n in
variable.value = n
, onCompleted:
bindToUIDisposable.dispose()
)
return CompositeDisposable(bindToUIDisposable, bindToVariable)
我想这样称呼它
bibind(property: self.userNameTextField.rx.text, variable: self.loginViewModel.userName.value )
显示编译器错误
Expression type 'Variable<String>' is ambiguous without more context
视图模型是这样的
import Foundation
import RxSwift
import RxCocoa
class LoginViewModel
var userName = Variable<String>("")
var password = Variable<String>("")
init()
userName = Variable("")
password = Variable("")
【问题讨论】:
【参考方案1】:类型不匹配。 userNameTextField.rx.text
返回一个 Observable<String?>
并且您的变量是一个 Observable<String>
。您可以使用orEmpty
来解决此问题,如userNameTextField.rx.text.orEmpty
。
通常,当您看到此错误时,表示类型不匹配,您需要通过更改其中一个对象的类型来修复它。
【讨论】:
谢谢!你让我开心! 这节省了我的时间,我的问题很相似,因为我已将类型设置为字符串,但给出的是字符串?以上是关于泛型函数参数给出“表达式类型不明确,没有更多上下文”的主要内容,如果未能解决你的问题,请参考以下文章
放入函数时,工作 Swift 代码返回“表达式类型不明确,没有更多上下文”