如何为Struct成员分配值?

前端之家收集整理的这篇文章主要介绍了如何为Struct成员分配值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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 full\n")
    } else {
        petItem.name = "turkey" <--- *** error ***
...

我无法为结构的任何成员赋值.我收到以下错误

错误:无法将’name’分配给’petItem’.

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

你看到这个错误的原因是addItem里面的petItem是不可变的(你不能改变它).如果要更改传入的实例,则需要以这种方式声明函数
func addItem(var petItem:Item) -> Bool { ...

不幸的是,现在你有另一个错误,因为你用let创建的petItem变量是不可变的.所以把它改成var和off你去吧:

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

所以现在你可以运行你的代码了,你可能会意识到你在addItem()中设置的名字并不是你的petItem变量.发生了什么?在Swift中,struct实例按值传递给函数,因此函数中的参数不会影响原始变量,除非参数声明为inout.所以我们这样做:

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

并且您需要更改通话以表明您知道可以修改此参数:

if addItem(&petItem) { ...

猜你在找的Swift相关文章