超载' =='操作员在swift

时间:2016-01-20 16:05:13

标签: swift

我试图超载' ==' Swift中String类的运算符:

public func ==(left: String, right: String) -> Bool
{
    let ret = left.caseInsensitiveCompare(right) == NSComparisonResult.OrderedSame ? true : false;

    return ret;
}

但每当我尝试在代码中使用它时:

func test(a: String) -> Bool
{
    if  (a == "Just Testing") {
        return true;
    }
    else {
        return false;
    }
}

正在显示以下编译器错误消息:

操作员的模糊使用' =='

我该如何解决这个问题? THX。

2 个答案:

答案 0 :(得分:7)

正如Cristik所提到的,由于已经为两个字符串定义了==运算符,因此您无法定义另一个字符串。一种选择是定义一个新的运算符:

infix operator ==^ {}

func ==^(lhs:String, rhs:String) -> Bool {
    return lhs.caseInsensitiveCompare(rhs) == .OrderedSame
}

"abc" ==^ "ABC"

答案 1 :(得分:1)

这是因为Swift已经为两个String值定义了==运算符:

public func ==(lhs: String, rhs: String) -> Bool

并且它不知道选择哪一个,因为您还提供了一个实现。