Xcode Swift:使用If语句转换阵列字符串
这是一个带有标签和四个按钮的简单测验应用程序。我希望操作按钮中的代码通过引用if语句中的问题来执行。(参考答案标签的问题是,只有四个按钮,但有四个以上的问题。)下面的代码给出了一个错误,您不能使用二进制运算符。我怎样才能做到这一点Xcode Swift:使用If语句转换阵列字符串,swift,xcode,Swift,Xcode,这是一个带有标签和四个按钮的简单测验应用程序。我希望操作按钮中的代码通过引用if语句中的问题来执行。(参考答案标签的问题是,只有四个按钮,但有四个以上的问题。)下面的代码给出了一个错误,您不能使用二进制运算符。我怎样才能做到这一点 struct Question { var Question : String! var Answers : [String]! var Answer : Int! } var Questio
struct Question {
var Question : String!
var Answers : [String]!
var Answer : Int!
}
var Questions = [Question]()
var QNumber = Int()
var AnswerNumber = Int()
Questions = [Question(Question: "One", Answers: ["", "", "", ""], Answer: 0),
Question(Question: "Two", Answers: ["", "", "", ""], Answer: 1),
Question(Question: "Three", Answers: ["", "", "", ""], Answer: 2),
Question(Question: "Four", Answers: ["", "", "", ""], Answer: 3),
Question(Question: "Five", Answers: ["", "", "", ""], Answer: 0),]
func PickQuestion(){
if Questions.count > 0{
QNumber = 0
QLabel.text = Questions[QNumber].Question
AnswerNumber = Questions[QNumber].Answer
for i in 0..<Buttons.count{
Buttons[i].setTitle(Questions[QNumber].Answers[i], for: UIControlState.normal)
}
Questions.remove(at: QNumber)
}
@IBAction func Btn4(_ sender: Any) {
if(Question == "Five") {
//CODE THAT NEEDS TO EXECUTVE
} else if(Question == "Four") {
//EXECUTE A DIFFERENT CODE
}
结构问题{
问:字符串!
var回答:[字符串]!
回答:Int!
}
变量问题=[问题]()
var QNumber=Int()
var AnswerNumber=Int()
问题=[问题(问题:“一”,答案:[“”,“”,“”,“”,“”],答案:0),
问题(问题:"二",答案:[",",",","一",,
问题(问题:"三",答案:[",",",","二",,
问题(问题:"四",答案:[",",",","三"),,
问题(问题:“五”,答案:[,,,,,,,],答案:0),]
func PickQuestion(){
如果0.count>0{
QNumber=0
QLabel.text=问题[QNumber]。问题
AnswerNumber=问题[QNumber]。回答
对于0中的i.你的问题非常不清楚,看起来你会从重新构建你的逻辑中受益。也就是说,如果这是一个简单的测验应用程序,并且你有几个带有
标签的按钮,0
,1
,2
和3
,那么你应该能够简单地比较问题的>使用按钮标记回答
属性,避免将任何字符串完全比较
您的问题也不清楚“当前问题”是如何选择的,因此您可能也希望确定该问题,我建议将对象存储在var
中的某个位置,以便您可以执行以下操作
var currentQuestion:Question!
// Get the first question or something.
currentQuestion = Questions.first
@IBAction func buttonTapped(sender: UIButton) {
if sender.tag == currentQuestion.Answer {
print("You are a winner")
// Time to get a new question son.
}
}
上面的代码未经测试,我希望它不会让您进一步困惑,但是,在当前的格式中,您的问题可能会被关闭,因为它不完全清楚您在问什么
编辑:
感谢您更新您的问题,现在您似乎正在尝试将问题
结构
与字符串
“五”
进行比较。这两个对象不可比较
要使代码正常工作,您应该使用已生成的AnswerNumber
变量,并检查数字是否匹配
@IBAction func Btn4(_ sender: Any) {
if AnswerNumber == 4 {
print("Correct Answer")
//CODE THAT NEEDS TO EXECUTVE
} else {
print("Wrong Answer")
//EXECUTE DIFFERENT CODE
}
}
假设每个按钮都有一个iAction
,则需要对每个按钮重复此操作,因此Btn5
看起来像这样
@IBAction func Btn5(_ sender: Any) {
if AnswerNumber == 5 {
...
编辑:
在闲聊之后,我们发现每个问题都需要一个自定义操作(如果选择了正确的答案)。这是一个mp3文件的形式,根据问题的不同播放
我们得出的结论是,按照现有的结构,您应该添加另一个变量来保存问题struct
中的mp3,但对于当前问题也是如此,如下所示
struct Question {
var Question : String!
var Answers : [String]!
var Answer : Int!
var audioFile: String!
}
var AnswerMP3 = ""
然后,当我们将当前问题与回答编号一起设置时,我们可以将mp3设置为这样
AnswerMP3 = Questions[QNumber].audioFile
这样,您就不需要对每个问题都进行硬编码操作。按钮只需将正确的mp3传递给另一种播放音频文件的方法
if AnswerNumer == 4 {
playMP3File(AnswerMP3)
}
func playMP3File(fileName:String) {
// user the fileName to play the audio file.
}
myString
从何而来?查看更多的代码和得到的确切错误会很有帮助。您的数组是什么?什么是“调用特定字符串”意思是?到底应该比较什么?我更新了帖子,试图让目标更明确。我希望这会有所帮助。谢谢。@Phillip我已经更新了我的答案,为你的代码添加了一个补丁。谢谢@Wez,但我实际上有10个问题,只有4个按钮……在第四个问题之后我该怎么办?我已经有了答案编号,而不是1-4。我可以对于同一个按钮,不要使用它两次。对我来说,这听起来不是个问题。每个问题只有4个答案,每个问题都会重复使用这些按钮,因此,除非某些问题的答案比其他问题多,否则你有多少个问题并不重要。好吧,让我们假设问题1和问题2都将答案作为第一个选项。因此,在按钮中1“如果应答号==0{”将出现两次。这意味着它将运行两个if语句的代码,因为if语句完全相同。它将运行两个代码。这不好。我需要运行其中一个代码。不是两个。如果使用您的方法,您只能调用四个不同的代码。我需要调用10个不同的代码。每个问题一个。