从多维数组中设置按钮标题

时间:2018-01-19 18:04:43

标签: ios arrays swift button

我有一个计算机科学ISP来创建一个琐事游戏。我试图从多维数组中的项目设置按钮的标题。该数组由22个问题组成,类型为String数组,数组中包含6个项目。 看起来像这样:

let Q1:[String] = ["3","Who invented the telephone?","Rogers","Virgin Mobile","Graham Bell","Nikola Tesla","0"]

我有一个包含所有22个问题(22 Q1-Q22)的混洗数组,我希望按钮的标题是shuffledArray中第一个数组中的第二个项目。但它给了我这个错误:

  

无法将“Any”类型的值转换为预期的参数类型“String?”

enter image description here

1 个答案:

答案 0 :(得分:1)

根据你得到的编译错误,我会假设如果你试图按选项并点击shuffledArray,可能是[[Any]]类型(取决于你如何宣布它)。如果您知道该元素应该是String,则可以按如下方式进行转换:

if let qLabelText = shuffledArray[0][1] as? String {
      qlabel.text = qLabelText
}

我会注意到:

  • 如果你非常确定shuffledArray应该是一个字符串数组的数组,那么你应该 - 相似 - 声明它[[String]],因此不需要将元素转换为字符串。

  • 但是,对于这种情况,为这样的案例(模板)创建自己的自定义模型可能是将其作为2D数组执行的更好选择。

例如:

struct QuestionModel {
    var number: String
    var content: String

    var answer1: String
    var answer2: String
    var answer3: String
    var answer4: String

    var correctAnswer: String
}

当然,声明模型的结构基于您的要求,可能没有必要按原样克隆它。

您可以将问题声明为:

let question1 = QuestionModel(number: "3", content: "Who invented the telephone?", answer1: "Rogers", answer2: "Virgin Mobile", answer3: "Graham Bell", answer4: "Nikola Tesla", correctAnswer: "0")

因此shuffledArray将是QuestionModel[QuestionModel])而不是[[String]]的数组。

现在,您可以将newQ函数编写为:

func newQ() {
    let queestion1 = shuffledArray[0]

    qlabel.text = question1.content
    button1.setTitle(question1.answer1, for: .normal)
    button2.setTitle(question1.answer2, for: .normal)
    button3.setTitle(question1.answer3, for: .normal)
    button4.setTitle(question1.answer4, for: .normal)
}

遵循上述方法会更具表现力,更易于使用。