我有3个代表城市的按钮,我已经通过tags
分配了Attribute Inspector
,如下所示,CityA as 0, CityB as 1, CityC as 2
。
我有一个标签的空数组
var cityTag: [Int] = []
然后在IBAction方法
@IBAction func cityButtonPressed(_ sender: AnyObject) {
guard let button = sender as? UIButton else { return }
cityTag = [sender.tag!]
}
我在citySelected
Transformable
当我保存数据时,它只记住所选的最后一个城市并在控制台上输出
Record Saved Successfully
citySelected = "(\n 2\n)";
但它应该如下所示,因为我选择了所有城市
Record Saved Successfully
citySelected = "(\n 0\n 1\n 2\n)";
我错过了什么?
答案 0 :(得分:2)
你不应该使用 cityTag = [sender.tag!] 你必须使用 cityTag.append(sender.tag!)
答案 1 :(得分:2)
就像你每次都重新初始化数组一样。而是添加或删除这样的新元素:
if(cityTag.contains(sender.tag!)) {
if let index = cityTag.index(of: sender.tag!) {
cityTag.remove(at: index)
}
} else {
cityTag.append(sender.tag!)
}
答案 2 :(得分:1)
你应该附加到数组
Worker
答案 3 :(得分:1)
在cityButtonPressed
方法中,您将按钮的标记值分配给array
。这将覆盖最后一个数组赋值。这意味着您第一次说cityTag = 1
,但只要按下第二个按钮cityTag = 2
即可。为避免这种情况,您必须通过将所有标记附加到cityTag
数组中来收集所有标记。
要附加它们,请使用以下代码:
cityTag.append(sender.tag!)
我希望这可以让你清楚地了解你的问题。
答案 4 :(得分:0)
尝试使用Set而不是Array,例如:
var cityTag: Set = []
@IBAction func cityButtonPressed(_ sender: AnyObject) {
guard let button = sender as? UIButton else { return }
if cityTag.contains(sender.tag) == false {
cityTag.insert(sender.tag)
}else{
cityTag.remove(sender.tag)
}
}
答案 5 :(得分:0)
我想你还需要检查一下:
if cityTag.contains(sender.tag!) {
//You can remove the unselected city tag from cityTag array
print(“already exists“)
}
else{
//Here you add selected city tag to cityTag array
cityTag.append(sender.tag!)
}