2016-01-20 4 views
-2

Я пытаюсь перегружать «==» оператора для класса Струнный в Swift:перегружать «==» оператор в скор

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

Как говорит Кристик, поскольку уже существует оператор == для двух строк, вы не можете с пользой определить другое. Одним из вариантов было бы определить нового оператора:

infix operator ==^ {} 

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

"abc" ==^ "ABC" 
1

Это потому, что Swift уже определяет оператор == для двух строковых значений:

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

и он не знает, какой из них выбрать, как вы также обеспечить реализацию.

Смежные вопросы