如何为Struct成员分配值?
发布时间:2020-12-14 05:30:30 所属栏目:百科 来源:网络整理
导读: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 = p
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’. 是否有补救措施或者我必须在实例创建期间分配所有值?
你看到这个错误的原因是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) { ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |