我收到了以下代码:
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。
有谁知道这个错误意味着什么?我最终可以做些什么。
答案 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
}
错误消息表示编译器未找到==
运算符来将Float
与Int
进行比较。但是,它可能会找到==
和MirrorDisposition
的{{1}}运算符,因此它会尝试将Int
转换为Float
,但显然不能,所以你收到一条错误信息。
(顺便说一下,你得到的类型错误是随机的,具体取决于编译器尝试使用的运算符。我得到MirrorDisposition
)。
错误消息是一个错误,应该有一条消息说Float is not convertible to Selector
。
检查值相等的明显修复是使用强制转换:
Could not find == operator for Float and Int
没有理由以这种方式比较类型,因为在Swift中,编译器会检查类型。永远不应该有理由明确地检查类型(当然,谈论价值类型,而不是对象类型)。