Hello. I have trouble with Numeric.zero property.
I try to check distance between a center minus radius of a body and the beginning of the outer box i.e zero point of coordinates. And I have the error. Can you please explain, what exactly does the static zero property in the Numeric protocol?
protocol Position {
associatedtype Measure: Numeric
var x: Measure { get set }
var y: Measure { get set }
var radius: Measure { get }
}
protocol Boxing {
associatedtype Measure: Numeric
var width: Measure { get }
var height: Measure { get }
}
struct Forum {
func checkDistance<Item: Position, Box: Boxing>(item: Item, box: Box)
where Item.Measure == Box.Measure
{
let edge = item.x - item.radius
if edge < Box.Measure.zero { /* collision */ }
/// Cannot convert value of type 'Item.Measure' to expected argument type 'Unicode.CanonicalCombiningClass'
}
}
OH I am sorry.
associatedtype Measure: Numeric, Comparable, fix the problem. I did not expect that numeric is not comparable.
Karl
(👑🦆)
3
That is still a spectacularly poor diagnostic, though. Worth filing a bug report about IMO.
We could detect when you try and use very common operators (like for Equatable/Comparable) on values of an associated type which aren't constrained to require those protocols.
3 Likes
Now it is there. This note helped me.
struct Forum {
func checkDistance<Item: Position, Box: Boxing>(item: Item, box: Box)
where Item.Measure == Box.Measure
{
let edge = item.x - item.radius
if edge > box.width {}
// Binary operator '>' cannot be applied to two 'Item.Measure' operands
}
}
A problem is only with zero property.
1 Like