我有一个计算机科学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?”
答案 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)
}
遵循上述方法会更具表现力,更易于使用。