Swift 中的 DNA 到 RNA 转录

DNA to RNA transcription in Swift

我正在尝试 return 给定 Swift 中的 DNA 链(字符串)的 RNA 互补。基本上,如果 DNA 有 "T",我会用 "U".

替换它

我的代码是:

func toRNA(DNA: String) -> String{
    var RNA = DNA
    for ntide in RNA{
        if ntide == "T"{
            ntide = "U"
        }
    }
    return RNA
}

Swift:: 错误:

cannot assign to value: 'ntide' is a 'let' constant

ntide = "U"
~~~~~ ^

使用

func toRNA(DNA: String) -> String{
    return DNA.replacingOccurrences(of: "T", with: "U")
}

您的问题是由于 for ... in ... 循环中声明的变量是不可变的。对于简单的 Collection,您只需遍历 Collection 中存在的索引范围并使用下标访问可变变量的值。

func toRNA(_ DNA:[Character])->String{
    var RNA = DNA
    for i in 0..<DNA.count {
        if RNA[i] == "T" {
            RNA[i] = "U"
        }
    }
    return String(RNA)
}

let dna:[Character] = ["A","C","G","T"]
toRNA(dna) //"ACGU"

但是,由于String索引和下标的不同,这对你的问题来说不是那么简单,因此上面的例子使用Array<Character>来展示泛型方法。对于字符串的具体问题,请参阅以下解决方法。

您可以解决此问题,而不是将 DNA 复制到 RNA,然后遍历 RNA 来寻找必要的字符,您只需遍历 DNA并更改要添加的字符。

func toRNA(DNA: String) -> String{
    var RNA = ""
    for char in DNA {
        if char == "T" {
            RNA.append("U")
        } else {
            RNA.append(char)
        }
    }
    return RNA
}

一个更简单的解决方案,它不能解决特定问题,但适用于这个特定问题,是使用简单的 map 将所有字符 "T" 转换为 "U" .

func toRNA(DNA: String) -> String{
    return String(DNA.map({[=12=]=="T" ? "U" : [=12=]}))
}