泛型函数参数给出“表达式类型不明确,没有更多上下文”

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&lt;String?&gt; 并且您的变量是一个 Observable&lt;String&gt;。您可以使用orEmpty 来解决此问题,如userNameTextField.rx.text.orEmpty

通常,当您看到此错误时,表示类型不匹配,您需要通过更改其中一个对象的类型来修复它。

【讨论】:

谢谢!你让我开心! 这节省了我的时间,我的问题很相似,因为我已将类型设置为字符串,但给出的是字符串?

以上是关于泛型函数参数给出“表达式类型不明确,没有更多上下文”的主要内容,如果未能解决你的问题,请参考以下文章

在准备函数中卡住“表达式类型不明确,没有更多上下文”

放入函数时,工作 Swift 代码返回“表达式类型不明确,没有更多上下文”

测试在抛出的 func 上返回“表达式类型不明确,没有更多上下文”

Xcode:表达式类型不明确,没有更多上下文

表达式类型不明确,没有更多上下文”Alamofire 错误

代码返回“表达式类型不明确,没有更多上下文”Swift