Как сравнить одно значение с несколькими значениями - Swift

Скажем, что у вас есть код

if stringValue == "ab" || stringValue == "bc" || stringValue == "cd" {
    // do something
}

Есть ли способ сократить это условие или украсить его (желательно без использования оператора switch)? Я знаю, что этот код НЕ работает:

if stringValue == ("ab" || "bc" || "cd") {
    // do something
}

Я видел некоторые сложные решения на других языках, но они кажутся специфичными для языка и не применимы к Swift. Любые решения будут оценены.

Ответы

Ответ 1

let valuesArray = ["ab","bc","cd"]

valuesArray.contains(str) // -> Bool

Ответ 2

Не то, что я знаю, вы можете сделать что-то вроде этого, но

let validStrings = Set<String>(arrayLiteral:"ab", "bc", "cd")
if validStrings.contains(str) {
    //do something      
}

Ответ 3

Вы можете создать расширение следующим образом:

extension Equatable {
    func oneOf(other: Self...) -> Bool {
        return other.contains(self)
    }
}

и используйте это так:

if stringValue.oneOf("ab", "bc", "cd") { ... }

Спасибо за ум, который спас меня, набрав его: https://gist.github.com/daehn/73b6a08b062c81d8c74467c131f78b55/

Ответ 4

if someArray.contains(object) {
  // contains
 } else {
  // does not contains
  }

Здесь выше функция возвращает значение bool, тогда вы записываете логику соответственно.

Ответ 5

Если вы хотите проверить, есть ли String число значений, вы можете установить extension как:

extension String: {
 func containsStrings(other: [String]) -> Bool {
     for string in other {
         if self.containsString(string) {
             return true
         }
     }
     return false
 }
}

И использовать его:

let stringValue = "apple"

if stringValue.containsStrings(["ab", "bc", "le"]) {
 //Do something
}

Ответ 6

Используйте оператор Switch.

switch stringValue {
case "ab", "bc", "cd":
print("Yay!")
break 

default:
break 

}

Ответ 7

let a = 1
let b = 1
let c = 1
let d = 1
if a == b,a==c,a==d  {
    print("all of them are equal")
}
else {
    print("not equal")
}