按顺序显示A,B,C,D标签:Swift

时间:2017-08-10 18:04:00

标签: swift

我创建了一个类似于测验游戏的东西,它显示A,B,C,D。问题是它显示A,B,C,D乱序。

enter image description here

这是我用来显示它们的代码:

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)


    }

我使用数据库来调用它们,我已经检查过数据库是否正确显示它们(它按顺序显示)这可能是非常容易修复的,但是无法找到解决方案。非常感谢您的帮助。 〜谢谢

1 个答案:

答案 0 :(得分:2)

根据代码,您提供的mode变量属于Dictionary类型,因为您正在调用keyvalue属性。

正如我之前在评论中提到的,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)
}

在控制台中打印offsetvaluevalue订购:

2 A
3 B
0 C
1 D

我希望这会对你有所帮助。