ios - 在 Swift 中声明采用符合 “can be multiplied” 的泛型类型的函数

标签 ios swift

如何在 Swift 中声明采用符合“可以相乘”的泛型类型的函数?

例如:

 func sq <T: "Can be multipied">(x: T) -> T {
    return x*x
 }

这样我就可以对 Float、Double、CGFloat 等进行平方...这可能吗?

最佳答案

您可以像这样定义自己的协议(protocol):

protocol Multipliable {
   func *(lhs: Self, rhs: Self) -> Self
}

func sq<T: Multipliable>(value:T) -> T {
  return value * value
}

extension Int: Multipliable {}
extension Double: Multipliable {}

sq(10)   // -> 100
sq(10.0) // -> 100.0

我相信您必须扩展您想要遵守此协议(protocol)的每个类,我不知道有什么方法可以在不使用扩展的情况下使其工作。

这是一篇关于 Equatable 协议(protocol)实现的有趣文章:

http://nshipster.com/swift-default-protocol-implementations/

关于ios - 在 Swift 中声明采用符合 “can be multiplied” 的泛型类型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25674604/

相关文章:

swift - 在带有继承的 Swift 4 中使用 Decodable

swift - 根据部分限制单元格选择

ios - 可扩展的 Tableview 与 sectionHeader 一起使用

ios - MKMapView 避免空白图 block [iOS 8+]

iphone - 禁用 iCloud 时是否可以使用 NSMetadataQuery?

javascript - 从 objective-c 到Javascript WKWebkit AVPlayer通知游戏结束

swift - 在应用程序启动之前执行完成处理程序

xcode - Swift 中的 Xcode 调试/崩溃报告是否损坏?

arrays - Swift 3 - 函数中数组值发生变化的问题

ios - 仪器报告的内存泄漏。不明白为什么