2016-01-20 71 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 

,它不知道哪一個選擇,你也提供一個實現。