当前位置:  开发笔记 > IOS > 正文

二进制运算符'+'不能应用于两个'T'操作数

如何解决《二进制运算符'+'不能应用于两个'T'操作数》经验,为你挑选了2个好方法。

我正在使用Generics添加不同类型,如Int,Double,Float等.我使用下面的代码,但我得到错误"二元运算符'+'不能应用于两个'T'操作数".

func add(num1: T,num2: T) -> T {
    return num1 + num2
}

Adam Campbel.. 33

Swift不知道泛型类型T有一个'+'运算符.你不能在任何类型上使用+:例如在两个视图控制器上+没有太多意义

您可以使用协议一致性让swift了解您的类型!

我在操场上去了,这可能就是你要找的:)

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

func add(num1: T, _ num2: T) -> T {
    return num1 + num2
}

extension Int: Addable {}
extension Double: Addable {}
extension Float: Addable {}

add(3, 0.2)

如果您需要在此解释的任何概念,请告诉我



1> Adam Campbel..:

Swift不知道泛型类型T有一个'+'运算符.你不能在任何类型上使用+:例如在两个视图控制器上+没有太多意义

您可以使用协议一致性让swift了解您的类型!

我在操场上去了,这可能就是你要找的:)

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

func add(num1: T, _ num2: T) -> T {
    return num1 + num2
}

extension Int: Addable {}
extension Double: Addable {}
extension Float: Addable {}

add(3, 0.2)

如果您需要在此解释的任何概念,请告诉我



2> Paul Solt..:

在Swift 4/Xcode 9+中,您可以利用数字协议.

func add(num1: T, num2: T) -> T {
    return num1 + num2
}

print(add(num1: 3.7, num2: 44.9)) // 48.6
print(add(num1: 27, num2: 100))  // 127

使用这意味着您不必自己创建特殊协议.

这仅适用于需要Numeric协议提供的功能的情况.您可能需要执行与@adam对%和其他运算符的回答类似的操作,或者您可以在Xcode 9 SDK中利用Apple提供的其他协议.


但是使用这个解决方案,所有类型必须相同......类型必须能够不同,即Int + Float
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有