【问题标题】:Why CustomStringConvertible protocol not working for Int?为什么 CustomStringConvertible 协议不适用于 Int?
【发布时间】:2016-09-02 07:03:15
【问题描述】:
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) 类型的操作数”。当我将它应用于'String'+'NSNumber'时它工作正常。 不知道幕后发生了什么。为什么它不起作用?

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    问题首先是(信不信由你)String 不符合CustomStringConvertible。因此,您需要自己调整它,以便它为description 返回self(可能比编写另一个重载来独立处理字符串更容易)。

    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
    }
    

    【讨论】:

    • 感谢@originaluser2
    • @Tailor 乐于助人:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 2019-10-21
    • 2017-11-25
    • 2014-09-20
    相关资源
    最近更新 更多