public func +<T: CustomStringConvertible>(lhs: T, rhs: T)->String{
return lhs.description+rhs.description
}
let a:String = "A"
let i:Int = 0
print(a+i)
我正在为CustomStringConvertible类型重载'+'运算符。String和Int都确认CustomStringConvertible协议,但给出错误:“二进制运算符'+'不能应用于类型为'String'和'Int'print(a + i)的操作数”。当我将其应用于“字符串” +“ NSNumber”时,它可以正常工作。不知道幕后发生了什么。为什么它不起作用?
问题首先是(信不信由你)String
不符合CustomStringConvertible
。因此,你会希望自己适应它,以便它返回self
的description
(比写另一个重载独立处理字符串可能更容易)。
extension String:CustomStringConvertible {
public var description: String {
return self
}
}
其次,您需要两个通用参数来处理+
重载,以使其能够接受两个参数的不同类型,同时确保两个参数都符合CustomStringConvertible
:
public func +<T: CustomStringConvertible, U:CustomStringConvertible>(lhs: T, rhs: U)->String{
return lhs.description+rhs.description
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句