2016-01-20 70 views
-2

我尝试过载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。

+0

试图改变的语义内置类型(这里:字符串比较)是一个非常,非常糟糕的主意。你可能会以不可预知的方式让意想不到的事情失败。 – DarkDust

回答

7

由于Cristik提到,由于已经有一个==运算符为两个字符串定义,所以不能有用地定义另一个字符串。一个办法是定义一个新的运营商:

infix operator ==^ {} 

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

"abc" ==^ "ABC" 
1

这是因为斯威夫特已经定义了==运营商两个字符串值:

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

,它不知道哪一个选择,你也提供一个实现。