无法赋值:'word'是'let'常量

Fab*_*ghi 9 swift

我得到以下错误:"无法赋值:'word'是'let'常数"我无法弄清楚为什么会发生这种情况.如果有人可以帮助我,我会非常感激.

这是代码:

import UIKit

class ViewController: UIViewController {

    var word1 = ""
    @IBOutlet weak var label: UILabel!

    func writeWord(word: String){
        word = "Example"
    }

    @IBAction func button(sender: AnyObject) {
        writeWord(word1)
        label.text = word1
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
Run Code Online (Sandbox Code Playgroud)

Lu_*_*Lu_ 15

你想在那里实现什么?

func writeWord(word: String){
    word = "Example"
}
Run Code Online (Sandbox Code Playgroud)

唯一的方法是:

func writeWord(word: String){
    var word = word
    word = "Example"
}
Run Code Online (Sandbox Code Playgroud)

  • 我很好奇为什么这个答案被否决了。这似乎是正确的并帮助了我。也许将其显示为 SWIFT3 会有所帮助。 (2认同)

Dan*_*iel 12

看到这个答案.

这似乎解决了你的问题,但仅适用于Swift 3之前的版本.

Swift中函数的参数是不可变的/你无法编辑它们.(src)

此外,字符串是值类型 - 而不是引用类型.很明显,这意味着该参数word不是对传递给函数的变量的引用.

为了更新值,您必须向函数添加一个返回值或者有一个类变量word,可以通过它来访问self.word.

如果你决定返回一个值,你会这样做:

func writeWord(word: String) -> String {
    var mutableWord = word
    // do stuff to word(?)
    return mutableWord
}
Run Code Online (Sandbox Code Playgroud)

老实说,我真的不知道你为什么这么做,我只是在猜测你的目标是什么.

你想要:

func writeWord(word: String) {
    word1 = word
    word2 = word
    word3 = word
    // ...
}
Run Code Online (Sandbox Code Playgroud)