我无法从Swift编译器中理解这个错误:
error: ambiguous reference to member '>'
let moveDirection = dx > 0 ? .right : .left
以下是代码:
enum MoveDirection {
case none
case left
case right
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else {
return;
}
let location = touch.location(in: humanPlayerScreen)
let previousLocation = touch.previousLocation(in: humanPlayerScreen)
let dx = location.x - previousLocation.x
let dy = location.y - previousLocation.y
let moveDirection = dx > 0 ? .right : .left // error
...
}
我尝试了很多内容,比如将dx
和0
同时投放到CGFloat
或使用0.0
,但到目前为止都没有。
有人可以解释一下,为什么会发生这种情况以及如何解决这个问题?
完整的错误消息:
Swift.>:5:13: note: found this candidate
public func >(lhs: UInt8, rhs: UInt8) -> Bool
^
Swift.>:5:13: note: found this candidate
public func >(lhs: Int8, rhs: Int8) -> Bool
^
Swift.>:5:13: note: found this candidate
public func >(lhs: UInt16, rhs: UInt16) -> Bool
^
Swift.>:5:13: note: found this candidate
public func >(lhs: Int16, rhs: Int16) -> Bool
^
Swift.>:5:13: note: found this candidate
public func >(lhs: UInt32, rhs: UInt32) -> Bool
^
Swift.>:5:13: note: found this candidate
public func >(lhs: Int32, rhs: Int32) -> Bool
^
Swift.>:5:13: note: found this candidate
public func >(lhs: UInt64, rhs: UInt64) -> Bool
^
Swift.>:5:13: note: found this candidate
public func >(lhs: Int64, rhs: Int64) -> Bool
^
Swift.>:5:13: note: found this candidate
public func >(lhs: UInt, rhs: UInt) -> Bool
^
Swift.>:5:13: note: found this candidate
public func >(lhs: Int, rhs: Int) -> Bool
^
Foundation.Date:95:24: note: found this candidate
public static func >(lhs: Date, rhs: Date) -> Bool
^
Foundation.IndexPath:51:24: note: found this candidate
public static func >(lhs: IndexPath, rhs: IndexPath) -> Bool
^
Foundation.IndexSet.Index:5:24: note: found this candidate
public static func >(lhs: IndexSet.Index, rhs: IndexSet.Index) -> Bool
^
CoreMedia.>:1:13: note: found this candidate
public func >(time1: CMTime,
time2: CMTime) -> Bool
^
Swift.>:10:13: note: found this candidate
public func ><T : Comparable>(lhs: T, rhs: T) -> Bool
^
Swift.>:1:13: note: found this candidate
public func ><T : FloatingPoint>(lhs: T, rhs: T) -> Bool
^
Swift.>:1:13: note: found this candidate
public func ><T : _SwiftNewtypeWrapper where T.RawValue : Comparable>(lhs: T, rhs: T) -> Bool
^
Swift.>:12:13: note: found this candidate
public func ><A : Comparable, B : Comparable>(lhs: (A, B), rhs: (A, B)) -> Bool
^
Swift.>:12:13: note: found this candidate
public func ><A : Comparable, B : Comparable, C : Comparable>(lhs: (A, B, C), rhs: (A, B, C)) -> Bool
^
Swift.>:12:13: note: found this candidate
public func ><A : Comparable, B : Comparable, C : Comparable, D : Comparable>(lhs: (A, B, C, D), rhs: (A, B, C, D)) -> Bool
^
Swift.>:12:13: note: found this candidate
public func ><A : Comparable, B : Comparable, C : Comparable, D : Comparable, E : Comparable>(lhs: (A, B, C, D, E), rhs: (A, B, C, D, E)) -> Bool
^
Swift.>:12:13: note: found this candidate
public func ><A : Comparable, B : Comparable, C : Comparable, D : Comparable, E : Comparable, F : Comparable>(lhs: (A, B, C, D, E, F), rhs: (A, B, C, D, E, F)) -> Bool
^
Swift.Comparable:158:24: note: found this candidate
public static func >(lhs: Self, rhs: Self) -> Bool
^
Swift.LazyFilterIndex<Base>:7:24: note: found this candidate
public static func >(lhs: LazyFilterIndex<Base>, rhs: LazyFilterIndex<Base>) -> Bool
^
答案 0 :(得分:8)
错误消息具有误导性。问题是您需要向Swift提供有关.left
和.right
的更多信息:
let moveDirection = dx > 0 ? MoveDirection.right : .left
或
let moveDirection: MoveDirection = dx > 0 ? .right : .left