如何将值赋给Struct成员

  • 本文关键字:Struct 成员 struct swift
  • 更新时间 :
  • 英文 :

struct Item {
    var name:String?
    var type:String?
    var value:Int?
    var tag:Int?
}
...
...
 let petItem = Item(name:petName!.uppercaseString, type:petType, value:0, tag:0)
 self.statusLabel.hidden = false
 if addItem(petItem) {
    self.statusLabel.text = petName! + " successfully added."
    self.textField.becomeFirstResponder()
 } else {
    self.statusLabel.text = "Sorry, Pet couldn't be added."
 }
...
...
func addItem(petItem:Item) -> Bool {
    if treeIsFull() {
        println("Tree is fulln")
    } else {
        petItem.name = "turkey" <--- *** error ***
...

不能给结构体的任何成员赋值。
我得到以下错误:

错误:不能将'name'分配给'petItem'。

是否有补救措施,或者我必须在实例创建期间分配所有值?

您看到该错误的原因是petItemaddItem中是不可变的(您不能更改它)。如果你想改变传入的实例,你需要这样声明函数:

func addItem(var petItem:Item) -> Bool { ...

不幸的是,现在您有另一个错误,因为您最初使用let创建的petItem变量是不可变的。所以把它改成var然后点击

var petItem = Item(name:petName!.uppercaseString, type:petType, value:0, tag:0)

现在你可以运行你的代码了,你可能会意识到你在addItem()中设置的name并没有显示给你的petItem变量。发生了什么事?在Swift中,struct实例是按值传递给函数的,所以函数中参数发生的任何变化都不会影响原始变量,除非将参数声明为inout。我们这样做:

func addItem(inout petItem:Item) -> Bool { ...

,你需要改变你的调用,以表明你知道这个参数可以被修改:

if addItem(&petItem) { ...

相关内容

  • 没有找到相关文章

最新更新