首页 > 解决方案 > Swift 中数字和字符串的通用总和

问题描述

我有这个函数,它返回数字的总和

func sum<T: Numeric>(_ a: T, _ b: T) -> T {
    return a + b
}

我需要改进这个函数,以便在不重载的情况下通过这个函数返回字符串的连接。我探测使用 RangeReplaceableCollection,但我不能将此协议与 Numeric 协议一起使用。

例如:

sum(2, 3) -> 5
sum(1.5, 2.4) -> 3.9
sum("abc", "def") -> "abcdef"

标签: iosswift

解决方案


要在这种情况下使用一个通用函数,您需要找到一种可以用作通用类型约束的通用行为。在您的情况下,您可以(但不应该)这样做:

不要这样做

extension String: AdditiveArithmetic {
    // some stupid placeholders, as there is no obvious behavior for that :D
    public static func - (lhs: String, rhs: String) -> String {
        lhs
    }

    public static var zero: String {
        ""
    }
}

func sum<T: AdditiveArithmetic>(_ a: T, _ b: T) -> T {
    a + b
}

print(sum("LOl", "KEK")) // LOLKEK
print(sum(1, 2)) // 3

建议只是为该特定情况添加一个新函数

func sum(_ a: String, _ b: String) -> String {
    a + b
}

推荐阅读