3

我有一个失败初始化程序,它接受一个字符串,如果这个字符串包含不正确的字符(T、A、C、G)我想返回 nil:

我尝试过这样的事情,但不成功:

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

    self.strand = strand
}

我不知何故被这两个contains电话弄糊涂了,所以我不确定我的检查是否正确。
任何帮助表示赞赏。

4

3 回答 3

5

在这种情况下,我更喜欢根据rangeOfCharacter(from字符集检查字符串的 API

init?(strand: String) {
    guard strand.rangeOfCharacter(from: CharacterSet(charactersIn: "TACG")) == nil else { return nil }
    self.strand = strand
}
于 2019-04-14T16:45:33.037 回答
2

如果您不想导入 Foundation,您也可以使用 Collection 方法 allSatisfy

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

并确保您的字符串包含所有字符

let allSatisfy = "CGAT".allSatisfy("TACG".contains)
print(allSatisfy)  // true
于 2019-04-14T23:57:51.843 回答
1

只需移动!展示位置,查看下面的代码。

 init?(strand: String) {
    let success = !strand.contains(where:  { "TACG".contains($0) }) 
    if !success {
        return nil
    }
    self.strand = strand
}
于 2019-04-14T16:43:49.610 回答