我收到以下错误:“无法分配值:'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.
}
}
答案 0 :(得分:14)
func writeWord(word: String){
word = "Example"
}
唯一的方法就是:
func writeWord(word: String){
var word = word
word = "Example"
}
答案 1 :(得分:11)
这似乎解决了您的问题,但仅适用于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中你可能不会遇到这个问题。