首页 > 解决方案 > Swift - 如何编写通用的 max 函数

问题描述

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

func max<T>(_ num1:T, _ num2:T) -> T {
    return (num1 > num2) ? num1 : num2;
}

但是我发现这不起作用,报告二进制操作'>'不能应用于两个'T'操作数。

我在这里看到了一个关于通用添加函数的例子

protocol Summable { static func +(lhs: Self, rhs: Self) -> Self }
extension Int: Summable {}
extension Double: Summable {}

func add<T: Summable>(x: T, y: T) -> T {
  return x + y
}

所以我认为我也应该为我的max功能制定一个协议。所以这是我的尝试:

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

但这不起作用。我知道 Swift 提供了一个Comparable协议,但我想自己尝试一下。能否请你帮忙?

标签: swiftgeneric-programming

解决方案


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

func max<T:TempComparable>(_ num1:T, _ num2:T) -> T {
    return (num1 > num2) ? num1 : num2;
}

推荐阅读