Swift-如何编写通用max函数

Swift-如何编写通用max函数,swift,generic-programming,Swift,Generic Programming,我是Swift新手,我想编写一个通用的max函数,用于比较两个参数并返回较大的参数,用于Int、Double等基本类型 func max<T>(_ num1:T, _ num2:T) -> T { return (num1 > num2) ? num1 : num2; } 但这不起作用。我知道Swift提供了一个类似的协议,但我想自己试试。您能帮忙吗?{ protocol TempComparable { static func >(lhs:Sel

我是Swift新手,我想编写一个通用的max函数,用于比较两个参数并返回较大的参数,用于Int、Double等基本类型

func max<T>(_ num1:T, _ num2:T) -> T {
    return (num1 > num2) ? num1 : num2;
}
但这不起作用。我知道Swift提供了一个类似的
协议,但我想自己试试。您能帮忙吗?

{
protocol TempComparable {
    static func >(lhs:Self, rhs:Self) -> Bool;
}

func max<T:TempComparable>(_ num1:T, _ num2:T) -> T {
    return (num1 > num2) ? num1 : num2;
}
静态函数>(左:自,右:自)->布尔; } func max(num1:T,num2:T)->T{ 返回(num1>num2)?num1:num2; }
您需要的是将您的协议创建为
Compariable
的子协议,并提供一个唯一的名称,而不是将其命名为与现有类型相同的名称,这会导致混淆。并在协议扩展中实现协议要求,并使所需类型符合协议。以下是方法:

protocol CustomComparable: Comparable {
    static func > (lhs: Self, rhs: Self) -> Self
}
extension CustomComparable {
    static func > (lhs: Self, rhs: Self) -> Self {
        lhs > rhs ? lhs : rhs
    }
}
extension Int: CustomComparable {}
extension Double: CustomComparable {}

为什么不使用Swift max func?让maxNum=max(firstNum,SecondNum)@DungeonDev是的,这是一个选项,但我更愿意了解未来使用的
协议。我读了一些苹果公司的文档,但仍然感到困惑。我看不到复制已经存在的
可比
协议有任何附加值,同样的。这意味着,即使是作为一个学习机会,这个问答对未来的读者来说也没有任何价值。我看不到复制已经存在的
可比的
协议有任何附加价值,同样的,对未来的读者来说。这意味着,即使作为一个学习机会,这个问答对未来的读者来说也没有任何价值。
protocol TempComparable {
    static func >(lhs:Self, rhs:Self) -> Bool;
}

func max<T:TempComparable>(_ num1:T, _ num2:T) -> T {
    return (num1 > num2) ? num1 : num2;
}
protocol CustomComparable: Comparable {
    static func > (lhs: Self, rhs: Self) -> Self
}
extension CustomComparable {
    static func > (lhs: Self, rhs: Self) -> Self {
        lhs > rhs ? lhs : rhs
    }
}
extension Int: CustomComparable {}
extension Double: CustomComparable {}