You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中无需为各类型写扩展实现通用数值与字符串相加函数

优化方案推荐

方案1:利用标准库协议+函数重载(无需自定义协议)

直接借助Swift标准库的Numeric协议(所有数值类型默认遵循),再针对String单独实现重载函数,完全省去自定义协议和类型扩展的步骤:

// 处理所有数值类型(Int、Double、Float等)
func addition<T: Numeric>(first: T, second: T) -> T {
    return first + second
}

// 单独处理字符串类型
func addition(first: String, second: String) -> String {
    return first + second
}

使用时直接调用即可,Swift会自动匹配对应类型的实现:

let intSum = addition(first: 1, second: 2) // 3
let doubleSum = addition(first: 1.5, second: 2.5) // 4.0
let stringSum = addition(first: "Hello", second: " World") // "Hello World"

方案2:优化自定义协议(仅需2个扩展)

如果想保留自定义Addable协议的扩展性,可以通过条件扩展让所有数值类型自动遵循协议,仅需为字符串单独写一次扩展:

protocol Addable {
    static func +(lhs: Self, rhs: Self) -> Self
}

// 让所有遵循AdditiveArithmetic的类型自动实现Addable(数值类型都符合该协议)
extension Addable where Self: AdditiveArithmetic {}

// 单独为字符串实现Addable
extension String: Addable {}

func addition<T: Addable>(first: T, second: T) -> T {
    return first + second
}

这种方式既保留了泛型函数的统一性,又避免了为每个数值类型重复编写扩展代码。


内容的提问来源于stack exchange,提问作者Rahul Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:01:56