我正在创建一个应用程序,使用可以在纸上解码的常规密码对邮件进行编码,我遇到了这个问题。 Picture of error
我不确定你是否需要它,但这里面是代码:
func encodeMessage(input:String) -> String {
var output:String
if cipher == "Ceaser/Shift" {
for i in 0..<input.characters.count {
output = output.append(alphabet[seekAlphabet(letter: input[i])])
}
return output
}
}
另一段可能有用的代码:
func seekAlphabet(letter:String) -> Int {
for i in 0..<alphabet.count {
if alphabet[i] == letter {
return i
}
}
}
字母表只是一个字符串,是一系列字符串中的字母。
为什么会这样做的任何想法?谢谢!
答案 0 :(得分:0)
问题在于这一行:
output = output.append(alphabet[seekAlphabet(letter: input[i])])
append instance方法会改变原始字符串,它不会返回带有结果的值。如果您查看 docs ,您会看到它被声明为:
mutating func append(_ other: String)
通过替换
,您可以通过两种方式解决此问题output = output.append(alphabet[seekAlphabet(letter: input[i])])
使用以下任一项:
output.append(alphabet[seekAlphabet(letter: input[i])])
output = output + alphabet[seekAlphabet(letter: input[i])]
现在,您知道append(_:)
是一个变异函数,
output.append(alphabet[seekAlphabet(letter: input[i])])
是()
(a Void
),因为它只是变异并且不返回任何内容。因此,尝试将output
分配给append(_:)
方法时,您会尝试将字符串分配给Void
,这是非法的。
答案 1 :(得分:0)
Swift String
类append(_:)
正在改变函数并且不会返回任何内容。改变这一行
output = output.append(alphabet[seekAlphabet(letter: input[i])])
到
output.append(alphabet[seekAlphabet(letter: input[i])])