我在Swift中构建一个游戏来评估选择A是否为真或假与选择B相比。游戏适用于字符串但我想显示图像而不是字符串(例如firstQuestion.choiceA = "A"
,不显示“A”,而是显示与A相关的图像 - B表示相同。我已经看到了字典的解决方案,用于将字符串映射到图像或提取和比较图像名称,但不确定如何在我的情况下实现。代码的主要部分是随附的。在这种情况下,是否有人在Swift中有如何执行此操作的示例代码?
import UIKit
class ViewController: UIViewController {
class Questions {
var question : String
var answer : String
var choiceA : String
var choiceB : String
init() {
question = ""
answer = ""
choiceA = ""
choiceB = ""
}
func isCorrect(input : String) -> Bool {
return input == answer
} }
class QuestionGenerator {
var questionList : [Questions]
var counter : Int
var currentQuestion : Questions/
init() {
questionList = [Questions]()
counter = 0
currentQuestion = Questions()
}
func addQuestion(question : Questions) {
questionList.append(question)
}
func getNextQuestion() -> Questions {
if (counter < questionList.count) {
currentQuestion = questionList[counter]
counter = counter + 1
return currentQuestion
}
else
{
counter = 0
currentQuestion = questionList[counter]
return currentQuestion
} } }
class Model
{
var currentQuestion : Questions
var questionGen : QuestionGenerator
init()
{
let firstQuestion = Questions()
firstQuestion.question = "Which one took longer?"
firstQuestion.choiceA = "A"
firstQuestion.choiceB = "B"
firstQuestion.answer = firstQuestion.choiceA
questionGen = QuestionGenerator()
questionGen.addQuestion(firstQuestion)
}
func isCorrect(userInput : String) -> Bool
{
return userInput == currentQuestion.answer
} }
答案 0 :(得分:0)
您可以使用两个图像视图来显示故事板中与答案相关的两个图像。您可以使用asstes或url的名称加载此图像视图。如果您决定使用资产的名称,那么这个名称可能与答案的名称相同,或者您可以使用imageA和imageB向模型添加两个字符串。
然后你只需这样加载图像:
imageViewA.image = UIImage的(命名为:currentQuestion.choiceA)
答案 1 :(得分:0)
我写了一个如何在游乐场实现这个的例子。
在finder中打开playground文件并创建一个名为&#34; Resources&#34;的文件夹,在那里删除两个图像(称为&#34;图像&#34;和&#34;图像2&#34;)然后将此代码复制到游乐场。
import UIKit
enum AnswerOption {
case Text(String)
case Image(UIImage)
}
extension AnswerOption: Equatable { }
func ==(lhs: AnswerOption, rhs: AnswerOption) -> Bool {
switch (lhs, rhs) {
case (let .Text(str1), let .Text(str2)):
return str1 == str2
case (let .Image(img1), let .Image(img2)):
return img1 == img2
default:
return false
}
}
struct Question {
let text: String
let answer: AnswerOption
let choiceA: AnswerOption
let choiceB: AnswerOption
init(text: String, choiceA: AnswerOption, choiceB: AnswerOption, answer: AnswerOption) {
self.text = text
self.answer = answer
self.choiceA = choiceA
self.choiceB = choiceB
}
func isCorrect(input: AnswerOption) -> Bool {
return input == answer
}
}
extension Question {
func isCorrect(input: UIImage) -> Bool { return isCorrect(.Image(input)) }
func isCorrect(input: String) -> Bool { return isCorrect(.Text(input)) }
}
extension Question {
init(text: String, choiceA: String, choiceB: String, answer: String) {
self.init(text: text, choiceA: .Text(choiceA), choiceB: .Text(choiceB), answer: .Text(answer))
}
init(text: String, choiceA: UIImage, choiceB: UIImage, answer: UIImage) {
self.init(text: text, choiceA: .Image(choiceA), choiceB: .Image(choiceB), answer: .Image(answer))
}
}
class QuestionGenerator {
private var questions = [Question]()
private var counter = 0
private var currentQuestion: Question? {
return counter < questions.count ? questions[counter] : nil
}
func addQuestion(question : Question) {
questions.append(question)
}
func getNextQuestion() -> Question {
counter += 1
if counter >= questions.count {
counter = 0
}
return currentQuestion!
}
}
// ====== Example usage ======
let questionGenerator = QuestionGenerator()
questionGenerator.addQuestion(Question(text: "Which one took longer?", choiceA: "A", choiceB: "B", answer: "A"))
questionGenerator.addQuestion(Question(text: "Which didn't take long at all?", choiceA: "A", choiceB: "B", answer: "B"))
let image = UIImage(named: "image")!
let image2 = UIImage(named: "image2")!
questionGenerator.addQuestion(Question(text: "Which one is the StackOverflow logo?", choiceA: image, choiceB: image2, answer: image))
var question = questionGenerator.currentQuestion!
print(question.isCorrect(question.choiceA) ? "Correct" : "Incorrect")
question = questionGenerator.getNextQuestion()
print(question.isCorrect("A") ? "Correct" : "Incorrect")
question = questionGenerator.getNextQuestion()
print(question.isCorrect(image) ? "Correct" : "Incorrect")
枚举AnswerOption
可以是字符串或图像,枚举符合Equatable
。使用此解决方案,您可以在将来拥有图像,字符串或其他任何内容。
我的例子可能有点矫枉过正,但可以在游乐场看看,也许可以从中获得灵感。
答案 2 :(得分:0)
Outlet var QuestionLabel: UILabel!
Outlet var ButtonOne: UIButton!
Outlet var ButtonTwo: UIButton!
Outlet var OutputLabel: UILabel!
Action func checkAnswer(sender : UIButton)
let userInput = sender.titleLabel!.text
if(model.isCorrect(userInput!) == true)
{
OutputLabel.text = "Good Job"
let currentQuestion = model.getNextQuestion()
QuestionLabel.text = currentQuestion.question
ButtonOne.seTitle(currentQuestion.choiceA, forState: UIControlState.Normal)
ButtonTwo.setTitle(currentQuestion.choiceB, forState: UIControlState.Normal)
if (counter == 0)
{
ButtonOne.setBackgroundImage(UIImage(named:"A1"), for State: .Normal)
ButtonTwo.setBackgroundImage(UIImage(named:"B1"), for State: .Normal)
}
if (counter == 1)
{
ButtonOne.setBackgroundImage(UIImage(named:"A2"), for State: .Normal)
ButtonTwo.setBackgroundImage(UIImage(named:"B2"), for State: .Normal)
}
else
{
OutputLabel.text = "Sorry"
}