2014-12-01 45 views
3

我這是我的代碼,它是工作如何檢查是否有3個字符串在Swift中相等?

if (v1 == v2) && (v2 == v3) { 
    println("3 strings are equal") 
} 

是否有其他更迅捷的方式來做到這一點?

我的實現看起來像C代碼:-)

+0

沒有,在C它看起來像'如果(STRCMP(V1,V2)= = 0 ...':) – 2014-12-01 15:34:55

+0

我的意思是&& – WebOrCode 2014-12-01 15:39:37

+0

'&&'是一個有效的Swift運算符,具有「短路」的優點。 – 2014-12-01 15:46:07

回答

4

我不這麼認爲。這就像它變得簡單一樣。 (和C和ObjC的改善,太 - 你可以使用==運營商,而不是調用strcmpisEqual:。)

如果你真的想想怎麼樣吧,如果你創建了一個你也許可以寫v1 == v2 == v3自定義==操作符重載。 (這是留給讀者的一個練習。)但這可能不值得。

1

您可以使用擴展String類是這樣的:

extension String { 
    func allEquals (s1: String, s2: String) { 
     (this == s1) && (s1 == s2) 
    } 
} 

我沒編譯它,但它應該工作;)

1

如果你想成爲真正SWIFTY,你可以檢查字符串數組是所有平等的這樣的(你可以包裝在一個延伸,當然):

var array = ["test", "test", "test"] 
var allEqual = array.reduce(true, combine: { (accum: Bool, s: String) -> Bool in 
    accum && s == array[0] 
}) 

我可能不會調用它非常優雅或超高效......但它確實有效。

2

你可以做這樣的一些很酷的東西:

extension Array { 

    func allEqual(isEqual: (T, T) -> Bool) -> Bool { 
     if self.count < 2 { 
      return true 
     } 
     for x in self { 
      if !isEqual(x, self.first!) { 
       return false 
      } 
     } 
     return true 
    } 
} 

,然後調用它像這樣:

["X", "Y", "Z"].allEqual(==) // false 
["X", "X", "X"].allEqual(==) // true 
let one = "1" 
var ONE = "1" 
var One = "1" 
[one, ONE, One].allEqual(==) // true 
相關問題