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

时间:2016-08-12 08:45:26

标签: 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.
    }
}

3 个答案:

答案 0 :(得分:14)

你想在那里实现什么?

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

唯一的方法就是:

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

答案 1 :(得分:11)

this answer

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

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

此外,字符串为value types—not reference types。很明显,这意味着参数word不是对传递给函数的变量的引用。

要更新值,您必须向函数添加一个返回值,或者拥有一个由word访问的类变量self.word

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

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

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

你想要:

func writeWord(word: String) {
    word1 = word
    word2 = word
    word3 = word
    // ...
}

答案 2 :(得分:-2)

在Swift 2中你必须编写方法

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

而不是

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

因为函数中传递的参数默认为let,它是常量且无法更改其值。要改变参数值,你必须通过使变量显式变为可变。在Swift 3中你可能不会遇到这个问题。