【问题标题】:Ambiguous reference to member '=='对成员“==”的模糊引用
【发布时间】:2016-11-21 19:13:13
【问题描述】:

那一定是一个基本错误,但我看不出这段代码有什么问题:

.... object is some NSManagedObject ....
let eltType = ((object.valueForKey("type")! as! Int) == 0) ? .Zero : .NotZero

在编译时,我收到以下消息:

Ambiguous reference to member '=='

将 Int 与 0 进行比较对我来说似乎并不模棱两可,那么我错过了什么?

【问题讨论】:

    标签: ios swift operators arithmetic-expressions


    【解决方案1】:

    取下手镯似乎可行:

    let eltType = (object.valueForKey("type")! as! Int) == 0 ? .Zero : .NotZero

    【讨论】:

    • 删除括号对我没有任何影响。
    【解决方案2】:

    错误信息具有误导性。问题是编译器有 没有信息.Zero、.NotZero 指的是什么类型的值。

    该问题也与托管对象或valueForKey 无关 方法,您将收到相同的错误消息

    func foo(value: Int) {
        let eltType = value == 0 ? .Zero : .NotZero // Ambiguous reference to member '=='
        // ...
    }
    

    这个问题可以通过指定一个完全类型化的值来解决

    let eltType = value == 0 ? MyEnum.Zero : .NotZero
    

    或者通过提供编译器可以推断类型的上下文:

    let eltType: MyEnum = value == 0 ? .Zero : .NotZero
    

    【讨论】:

    • 确实,通过添加类型它可以工作。但是,如果我不使用三元运算符,而是使用 if () {...} else {...} 形式,那么它可以在没有类型的情况下工作。我看不出有什么区别。编译器可用于类型推断的信息似乎是相同的。
    • @Michel:没有类型的情况下,if/else 语句到底是什么?
    • 再看看我所做的,在声明变量时,我可能在某个时候给出了类型。让你写的正确。
    • 我有同样的错误信息,并且指定完整类型的枚举大小写解决了这个问题。但是我的情况是可以自动推断的,赋值的左侧是类的属性,因此声明了类型。 state = (cats.count == 0) ? .noData(parentNode: pNode) : .content(parentNode: pNode, childCategories: cats)。 @MartinR 你知道编译器还不清楚这是什么吗?
    猜你喜欢
    • 1970-01-01
    • 2019-11-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 2019-11-17
    相关资源
    最近更新 更多