Ответ 1
let valuesArray = ["ab","bc","cd"]
valuesArray.contains(str) // -> Bool
Скажем, что у вас есть код
if stringValue == "ab" || stringValue == "bc" || stringValue == "cd" {
// do something
}
Есть ли способ сократить это условие или украсить его (желательно без использования оператора switch)? Я знаю, что этот код НЕ работает:
if stringValue == ("ab" || "bc" || "cd") {
// do something
}
Я видел некоторые сложные решения на других языках, но они кажутся специфичными для языка и не применимы к Swift. Любые решения будут оценены.
let valuesArray = ["ab","bc","cd"]
valuesArray.contains(str) // -> Bool
Не то, что я знаю, вы можете сделать что-то вроде этого, но
let validStrings = Set<String>(arrayLiteral:"ab", "bc", "cd")
if validStrings.contains(str) {
//do something
}
Вы можете создать расширение следующим образом:
extension Equatable {
func oneOf(other: Self...) -> Bool {
return other.contains(self)
}
}
и используйте это так:
if stringValue.oneOf("ab", "bc", "cd") { ... }
Спасибо за ум, который спас меня, набрав его: https://gist.github.com/daehn/73b6a08b062c81d8c74467c131f78b55/
if someArray.contains(object) {
// contains
} else {
// does not contains
}
Здесь выше функция возвращает значение bool, тогда вы записываете логику соответственно.
Если вы хотите проверить, есть ли 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
}
Используйте оператор Switch.
switch stringValue {
case "ab", "bc", "cd":
print("Yay!")
break
default:
break
}
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")
}