Как проверить, содержит ли строка несколько символов в Swift 5 - PullRequest
3 голосов
/ 14 апреля 2019

У меня есть инициализатор сбоя, который принимает строку, если эта строка содержит неправильные символы (T, A, C, G), я хочу вернуть nil:

Я пробовал что-то вроде этого, безуспешно:

init?(strand: String) {
    let success = strand.contains(where:  { !"TACG".contains($0) })
    if !success {
        return nil
    }

    self.strand = strand
}

Я как-то запутался в двух contains вызовах, поэтому я не уверен, верен ли мой чек.
Любая помощь приветствуется.

Ответы [ 3 ]

4 голосов
/ 14 апреля 2019

В этом случае я бы предпочел API rangeOfCharacter(from, который сравнивает строку с набором символов

init?(strand: String) {
    guard strand.rangeOfCharacter(from: CharacterSet(charactersIn: "TACG")) == nil else { return nil }
    self.strand = strand
}
2 голосов
/ 15 апреля 2019

Если вы не хотите импортировать Foundation, вы также можете использовать метод Collection allSatisfy

func allSatisfy(_ predicate: (Character) throws -> Bool) rethrows -> Bool

и убедиться, что ваша строка содержит все символы

let allSatisfy = "CGAT".allSatisfy("TACG".contains)
print(allSatisfy)  // true
1 голос
/ 14 апреля 2019

Просто переместите размещение !, проверьте код ниже.

 init?(strand: String) {
    let success = !strand.contains(where:  { "TACG".contains($0) }) 
    if !success {
        return nil
    }
    self.strand = strand
}
...