【问题标题】:cannot assign to value: 'word' is a 'let' constant [duplicate]无法赋值:'word'是'let'常量[重复]
【发布时间】:2016-08-12 08:45:26
【问题描述】:

我收到以下错误:“无法赋值:'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.
    }
}

【问题讨论】:

  • 您究竟想在writeWord 方法中实现什么?
  • 现在我不确定你是否知道你想在这里做什么

标签: swift


【解决方案1】:

你想在那里实现什么?

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

唯一的方法是:

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

【讨论】:

  • 我很好奇为什么这个答案被否决了。这似乎是正确的并帮助了我。也许将其显示为 SWIFT3 会有所帮助。
  • 我也不确定,我认为原始帖子太混乱了,不知道答案是否有意义。祝你有美好的一天
  • 答案有点小,但效果更好,谢谢兄弟
  • 好评,谢谢。
  • 这个不错。
【解决方案2】:

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
    // ...
}

【讨论】:

  • 其实我有更多的变量(word1,word2,...)。我希望它们是空字符串,除非它们在函数 writeWord 中传递。当他们通过函数时,我希望为他们分配另一个字符串(“示例”)。最后,我想使用变量 word1(应该是“Example”)来做其他事情。
  • 谢谢.. 它也在 Swift 4 中工作。
  • 可以使用同一个命名空间var word = word
【解决方案3】:

在 Swift 2 中你必须编写方法

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

而不是

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

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

猜你喜欢
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 2021-05-25
  • 2016-04-08
相关资源
最近更新 更多