如何在 Swift 中实现数字和字符串相加的通用函数?

Vik*_*nha -1 generics ios swift

我正在尝试编写一个通用函数,它将添加字符串、整数、浮点数、双精度数。

但只有当我的泛型是数字约束时,我的泛型函数才使用数字。

func add<T: Numeric>(first:T, second:T) -> T {
    return first + second
}
Run Code Online (Sandbox Code Playgroud)

要使用字符串,它必须是序列,但同样它不适用于数字。

所以,请让我知道我在这里做错了什么。有没有办法制作单个函数来添加字符串和数字。

idz*_*idz 7

一种可能的解决方案是这样的。您知道您希望您的方法适用于任何已+定义的...因此定义一个显式协议。我们称它为Addable

protocol Addable {
    static func +(lhs: Self, rhs: Self) -> Self
}
Run Code Online (Sandbox Code Playgroud)

现在,使用扩展,声明Addable您关心的类型的一致性:

extension String: Addable {}
extension Int: Addable {}
extension Double: Addable {}
Run Code Online (Sandbox Code Playgroud)

并将您的add函数定义为:

func  add<T: Addable>(first: T, second: T) -> T {
    return first + second
}
Run Code Online (Sandbox Code Playgroud)