追加'produce'()',而不是预期的上下文结果类型'String

时间:2017-06-06 15:02:08

标签: ios swift

我正在创建一个应用程序,使用可以在纸上解码的常规密码对邮件进行编码,我遇到了这个问题。 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
        }
    }
}

字母表只是一个字符串,是一系列字符串中的字母。

为什么会这样做的任何想法?谢谢!

2 个答案:

答案 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 Stringappend(_:)正在改变函数并且不会返回任何内容。改变这一行

output = output.append(alphabet[seekAlphabet(letter: input[i])])

output.append(alphabet[seekAlphabet(letter: input[i])])