swift - 如何结合文字使用 Swift 不透明类型?
问题描述
我有以下功能
func greater<T: Comparable>(_ lhs: T, rhs: T) -> some Comparable {
lhs > rhs ? lhs : rhs
}
但是当我尝试以下操作时出现错误
greater(greater(1, 2), 3) // Cannot convert value of type 'Int' to expected argument type 'some Comparable'
我理解错误,但为什么编译器不能推断出这两种类型实际上都是Int
s?
解决方案
您不应该根据需要使用不透明的返回类型。一个简单的通用返回类型就足够了。
在您的示例中,不透明返回类型的问题在于它掩盖了实际的类型信息,因此 ofgreater(1, 2)
的类型与3
-的类型不同,some Comparable
并且Int
即使那some Comparable
实际上是Int
.
此外,您希望返回与输入参数完全相同的类型,即T
,而不是some Comparable
。如果您的返回类型是some Comparable
,您可以轻松地从您的函数返回任何其他Comparable
类型,而不是返回输入类型。
正确的实现是:
func greater<T: Comparable>(_ lhs: T, rhs: T) -> T {
lhs > rhs ? lhs : rhs
}
推荐阅读
- javascript - textarea下的空白默认是什么?
- google-sheets - 使用公式在 Google 表格中进行日期标准化
- python - 如何使用 python docx 将 html 转换为 docx
- javascript - 从数组中获取元素,其加起来的值大于给定值 JavaScript
- mysql - 如何在同一列中添加日期和时间与另一个日期和时间
- android - 如果应用程序在后台运行时前台服务正在运行,我如何访问麦克风?
- css - 如何:使用 Tailwind CSS 的全角选择元素
- javascript - 传单中的距离自动聚类标记
- javascript - 从物理设备卸载 React-Naitve 项目后如何安装它
- ssl - 在 SSL_read() 之前我需要 SSL_accept() 吗?