Swift 3: error: ambiguous reference to element '>'

I cannot understand this error from the Swift compiler:

error: ambiguous reference to member '>' let moveDirection = dx > 0 ? .right : .left 

Here is the code:

 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 ... } 

I have tried many things, for example, dropping both dx and 0 to CGFloat or using 0.0 , but none of them have worked so far.

Can someone explain why this is happening and how to fix it?

Full error message:

 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 ^ 
+5
source share
1 answer

The error message is misleading. The problem is that you need to provide Swift with more information about .left and .right :

 let moveDirection = dx > 0 ? MoveDirection.right : .left 

or

 let moveDirection: MoveDirection = dx > 0 ? .right : .left 
+7
source

Source: https://habr.com/ru/post/1258297/


All Articles