swift - 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
协议,但我想自己尝试一下。能否请你帮忙?
解决方案
protocol TempComparable {
static func >(lhs:Self, rhs:Self) -> Bool;
}
func max<T:TempComparable>(_ num1:T, _ num2:T) -> T {
return (num1 > num2) ? num1 : num2;
}
推荐阅读
- python-3.x - 从动态加载的站点中提取数据
- c - int (*ptr)[4] 的真正含义是什么,它与 *ptr 有何不同?
- javascript - 有人可以解释如何使用插件 vuejs-progress-bar
- python - 错误:找不到满足 kivy-deps.angle 要求的版本(来自版本:无)
- matlab - 使用 Filtering、butterworth、filtfilt 命令去除相位差
- google-cloud-platform - Firestore:使用扩展 firestore-bigquery-export 将多个集合/子集合同步到 BigQuery
- c - CS50 模糊功能未通过 check50,即使图像正在模糊
- flutter - 拖动 Pageview 时,PageView 中的动画会丢失
- sql-server - 填充表“users”更新列“Additional_field_1”,列“ID”,7个随机数没有前两个数字是列“ID”
- mongodb - 如何在不通过 mongoengine 省略的情况下将 mongodb 归档值更新为 null?