我创建了一个类似于测验游戏的东西,它显示A,B,C,D。问题是它显示A,B,C,D乱序。
这是我用来显示它们的代码:
for (buttonIndex, value) in model.answers.enumerated() {
let id = value.key
let answer = value.value
answersKeys.append(id)
print(id)
let answerLabel = UILabel()
answerLabel.text = answer
let answerButton = UIButton()
let imageNormal = UIImage(named: "circle_empty")
let imageSelected = UIImage(named: "circle_filled")
answerButton.setImage(imageNormal, for: .normal)
answerButton.setImage(imageSelected, for: .selected)
answerButton.tag = buttonIndex // (2) store current button index as tag
answerButton.setTitleColor(.black, for: .normal)
answerButton.addTarget(self, action: #selector(answerPressed(_:)), for: .touchUpInside)
answersStack.addArrangedSubview(answerLabel)
answersStack.addArrangedSubview(answerButton)
}
我使用数据库来调用它们,我已经检查过数据库是否正确显示它们(它按顺序显示)这可能是非常容易修复的,但是无法找到解决方案。非常感谢您的帮助。 〜谢谢
答案 0 :(得分:2)
根据代码,您提供的mode
变量属于Dictionary
类型,因为您正在调用key
和value
属性。
正如我之前在评论中提到的,Dictionary
类型是无序数据结构,因此当您插入值时,它并不意味着它与您插入的顺序相同。让我们看看以下示例:
let dict: [Int: String] = [
0: "D",
1: "A",
2: "C",
3: "B"
]
print(dict.enumerated().map { ($0, $1) })
打印到控制台:
[(0, (key: 2, value: "C")), (1, (key: 0, value: "D")), (2, (key: 1, value: "A")), (3, (key: 3, value: "B"))]
正如您所看到的那样,当我们插入字典时,值的顺序完全不同。
因此,如果您对枚举进行排序,您可以获得有关其值的预期排序结果,请参阅以下示例:
print(dict.enumerated().sorted { $0.0.element.value < $0.1.element.value })
打印到控制台:
[(offset: 2, element: (key: 1, value: "A")), (offset: 3, element: (key: 3, value: "B")), (offset: 0, element: (key: 2, value: "C")), (offset: 1, element: (key: 0, value: "D"))]
dict
的枚举按其值排序。
因此,如果我们应用相同的逻辑并使map
省略offset
,我们可以获得以下代码:
let orderedDict = dict.enumerated().sorted { $0.0.element.value < $0.1.element.value }
for (index, value) in orderedDict {
print(index, value.value)
}
在控制台中打印offset
和value
按value
订购:
2 A
3 B
0 C
1 D
我希望这会对你有所帮助。