Я это мой код, и он работаетКак проверить, равны ли 3 строки в Swift?
if (v1 == v2) && (v2 == v3) {
println("3 strings are equal")
}
Есть ли другие более Swift способ сделать это?
Моя реализация выглядеть код C :-)
Я это мой код, и он работаетКак проверить, равны ли 3 строки в Swift?
if (v1 == v2) && (v2 == v3) {
println("3 strings are equal")
}
Есть ли другие более Swift способ сделать это?
Моя реализация выглядеть код C :-)
Я так не думаю. Это так же просто, как и получается. (И улучшение на С и ObjC тоже - вы можете использовать оператор ==
вместо вызова strcmp
или isEqual:
.)
Если вы действительно хотите, чтобы сходить с ума с ним, вы могли бы написать v1 == v2 == v3
если вы создали пара пользовательских ==
перегрузки оператора. (Это остается как упражнение для читателя.) Но это, вероятно, не стоит.
Вы можете использовать расширение для класса строки, как это:
extension String {
func allEquals (s1: String, s2: String) {
(this == s1) && (s1 == s2)
}
}
Я не был скомпилирован, но он должен работать;)
Если вы хотите быть действительно Swifty, вы можете проверить массив строк, чтобы быть все равно, как это (можно обернуть, что в продолжение, конечно):
var array = ["test", "test", "test"]
var allEqual = array.reduce(true, combine: { (accum: Bool, s: String) -> Bool in
accum && s == array[0]
})
я бы, вероятно, не позвонить это либо чрезвычайно элегантно, либо суперэффективно ... но это, безусловно, работает.
Вы могли бы сделать что-то крутое, как это:
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
Нет, в C это будет выглядеть как 'если (STRCMP (v1, v2) = = 0 ... ':) –
Я имел в виду из-за && – WebOrCode
' && 'является действительным оператором Swift и имеет преимущество« короткого замыкания ». –