2016-10-15 5 views
-1

この質問は、スウィフト3を使用してテキストアンケートシステムを構築することについてです。 質問があると仮定すると、ユーザーはその時点で1つの質問をし、テキストで返信します(UITextFieldを使用)。 答えが期待されるものなら(例えばYES/NO)、コードは次の質問に進むでしょう。そうでなければ、より精巧な質問を可能な回答で与えようとします(下のコードを参照)。テキストアンケートシステム - スウィフト3

アイデアは辞書の配列のいくつかの種類を持っているが、各辞書(questionItem)は、単一の質問/回答データを...含まれてい

質問:次のコードは正常に動作します場合でも、Iこれは最もスケーラブルでエレガントなソリューションではないと感じています。したがって、私の質問はコード設計に関するあなたのアイデアに関するものです。 どうすればこのようなコードを作ることができますか?それは複数の質問に対してスケーラブルです。

static var questionItem = [ 
    "question": "Is the sky blue?", 
    "answer": "yes", 
    "afterAnswer": "question #2", 
    "explanation": "simply answer: yes or no" 
] 



class func getAnswer(answer: String) -> String 
{ 
    let expectedAnswer = questionItem["answer"] 
    let isEqual = (answer == expectedAnswer) 

    var respond = "undifined" 

    if isEqual { 
     // go for next question (questionItem["afterAnswer"]) 
     respond = "ok, going to the next question" 
    } else { 
     // didn't got the answer I was waiting for, going to show some longer explanation 
     respond = questionItem["explanation"]! 

    } 
    // respond 
    return respond 
} 

答えて

0

あなたはその後、型のIntのトリビアを作成し、ご希望の情報を持つ構造体を作成することができます。YourStructは、すべての異なる質問の答えと説明を管理するには、以下の私の例のように、私に知らせて十分にその明確です:

struct QuestionsAndAnswers{ 

    var question: String = "" 
    var answer: String = "" 
    var explanation: String = "" 

} 

var trivia: [Int: QuestionsAndAnswers] = [:] 

trivia = [1: QuestionsAndAnswers.init(question: "Your First Question", answer: "Your Fist Answer", explanation: "Your First explanation")] 

trivia = [2: QuestionsAndAnswers.init(question: "Your Second Question", answer: "Your Second Answer", explanation: "Your Second explanation")] 

func getAnswer(answer: String, quesiontNumber: Int) -> String 
{ 
    let expectedAnswer = trivia[quesiontNumber]?.answer 
    let isEqual = (answer == expectedAnswer) 

    var respond = "undifined" 

    if isEqual { 
     // go for next question (questionItem["afterAnswer"]) 
     respond = "ok, going to the next question" 
    } else { 
     // didn't got the answer I was waiting for, going to show some longer explanation 
     respond = (trivia[quesiontNumber]?.explanation)! 

    } 
    // respond 
    return respond 
} 
+0

名護は、まだあなたのコードがエラーを再同調されて感謝します。varトリビア:下の行に期待宣言[のInt:QuestionsAndAnswers] = [:] – chewy

+0

あなたは、迅速な3を使用していますか?私はそれを遊び場で試しても何の問題もありません! –

+0

はいswift 3、クラスで使用しています – chewy