float不能转换为' MirrorDisposition' Swift什么是mirrordisposition?

时间:2014-07-22 15:42:59

标签: swift

我收到了以下代码:

let floatValue: Float = 1
let intValue: Int = 1

if floatValue == intValue   {
    println("Types and value are equal")
} else {
    println("Type is not equal.")
}

我知道会打印出“Type is not equal。”

但我在if floatValue == intValue收到错误 错误是:

  

Float无法转换为'MirrorDisposition'

我以前从未见过这个错误,也找不到任何相关信息。 此代码在xCode 6 beta 1,2和3中运行良好。 我现在正在运行xCode 6 beta 4。

有谁知道这个错误意味着什么?我最终可以做些什么。

1 个答案:

答案 0 :(得分:16)

MirrorDisposition是您可以从Mirror值获取的类型之一(使用reflect函数)。它们是为IDE创建的,用于显示值。

/// How children of this value should be presented in the IDE.
enum MirrorDisposition {
    case Struct
    case Class
    case Enum
    case Tuple
    case Aggregate
    case IndexContainer
    case KeyContainer
    case MembershipContainer
    case Container
    case Optional
    case ObjCObject
}

错误消息表示编译器未找到==运算符来将FloatInt进行比较。但是,它可能会找到==MirrorDisposition的{​​{1}}运算符,因此它会尝试将Int转换为Float,但显然不能,所以你收到一条错误信息。

(顺便说一下,你得到的类型错误是随机的,具体取决于编译器尝试使用的运算符。我得到MirrorDisposition)。

错误消息是一个错误,应该有一条消息说Float is not convertible to Selector

检查值相等的明显修复是使用强制转换:

Could not find == operator for Float and Int

没有理由以这种方式比较类型,因为在Swift中,编译器会检查类型。永远不应该有理由明确地检查类型(当然,谈论价值类型,而不是对象类型)。