The clean way would be to make it an enum with var signum that would return -1, 
0, 1:

enum IntegerSign<NumberType: SignedNumberType> {

    case Negative
    case Zero
    case Positive
        
    var signum: NumberType {
        switch self {
        case .Negative:
            return -1 as NumberType
        case .Zero:
            return 0 as NumberType
        case .Positive:
            return 1 as NumberType
        }
    }
        
}

extension SignedNumberType {
    var sign: IntegerSign<Self> {
        if self == 0 {
            return .Zero
        } else if self > 0 {
            return .Positive
        } else {
            return .Negative
        }
    }
}

Charlie

> On May 23, 2016, at 9:29 AM, Haravikk via swift-evolution 
> <[email protected]> wrote:
> 
> Could you give an example of this method’s usage? Surely your value is either 
> positive, negative or zero already, so this method doesn’t return anything 
> more useful.
> 
> In other words, anywhere that I might do this:
> 
>       if myValue.sign > 0 { … }
> 
> I could just as easily do:
> 
>       if myValue > 0 { … }
> 
> To the same end result surely? Unless I’m missing something it seems 
> redundant.
> 
> If there is a use-case for this, would it make more sense to have the return 
> type as an enum with cases for Positive, Negative and Zero?
> 
>> On 22 May 2016, at 08:07, Adam Nemecek via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>> Howdy,
>> I think that the SignedNumberType should implement a method called sign that 
>> will return -1 for negative numbers, 0 for 0 and 1 for positive numbers. 
>> This is similar to the signum method in e.g. Java and similarly called 
>> methods in other languages.
>> 
>> The implementation is fairly straight forward
>> 
>> extension SignedNumberType {
>>   var sign: Self {
>>     if self == 0 {
>>       return 0
>>     }
>>     else if self > 0 {
>>       return 1
>>     }
>>     return -1
>>   }
>> } 
>> 
>> I was trying to implement is without branching by doing (x > 0) - (x < 0) 
>> but I couldn't get the types right so I'm open to suggestions.
>> 
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> [email protected] <mailto:[email protected]>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to