我正试图返回一个RNA补体,给一个DNA链(一个字符串)在Swift。基本上,如果DNA有一个“T”,我用一个“U”来代替它。
我的代码是:

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

Swift::错误:
无法赋值:“ntide”是“let”常量
ntide = "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({$0=="T" ? "U" : $0}))
}

关于swift - Swift中DNA到RNA的转录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48568670/

10-12 20:46