通用加法函数Swift

时间:2016-02-16 09:48:11

标签: swift generics

我想创建一个可以接受两个参数的函数,并根据它应该执行二进制操作的输入类型(例如' int'简单的加法,对于字符串它应该连接等...)和返回结果。我得到的错误就像"二元运算符'+'不能应用于两个'T'操作数"以下方法

func commonAdd <T>(paramA:T,paramB:T)->T

2 个答案:

答案 0 :(得分:3)

一种可能的方法。

1)可添加协议

您定义了Addable协议。

protocol Addable {
    func add(other:Self) -> Self
}

2)commonAdd函数

接下来,您可以通过这种方式定义功能

func commonAdd <T: Addable>(paramA:T,paramB:T) -> T {
    return paramA.add(paramB)
}

3)使Int符合Addable

接下来,您选择一个类型并使其符合Addable

extension Int: Addable {
    func add(other: Int) -> Int {
        return self + other
    }
}

4)用法

现在,您可以将您的功能与Int一起使用。

commonAdd(1, paramB: 2) // 3

更多

您应重复步骤3,以便在您的功能中使用每个类型Addable

答案 1 :(得分:-1)

要添加的通用函数(整数,双精度,字符串)

func add<T: Any >(itemA: T, itemB: T) -> T {

    if itemA is Int && itemB is Int {
        debugPrint("Int")
        let intNum1 = itemA as! Int
        let intNum2 = itemB as! Int
        return intNum1 + intNum2 as! T
        
    } else if itemA is Double && itemB is Double {
        debugPrint("Double")
        let doubleNum1 = itemA as! Double
        let doubleNum2 = itemB as! Double
        return doubleNum1 + doubleNum2 as! T
    } else {
        debugPrint("String")
        let string1 = itemA as! String
        let string2 = itemB as! String
        return string1 + string2 as! T
        
    }
    
}