#swift #text
#swift #текст
Вопрос:
Этот вопрос касается построения системы текстовых анкет с использованием swift 3. Предполагая, что у нас есть (n) вопросов, пользователю будет задаваться по одному вопросу за раз, отвечая текстом (используя UITextField). если ответ соответствует ожидаемому (например, ДА / НЕТ), код перейдет к следующему вопросу, в противном случае он попытается задать более сложный вопрос с возможными ответами (см. Код ниже).
Идея заключается в том, чтобы иметь какой-то массив словарей, каждый словарь (questionItem) содержит данные одного вопроса / ответа…
Вопрос: даже если следующий код работает нормально, я чувствую, что это не самое масштабируемое и элегантное решение. Таким образом, мой вопрос больше касается ваших идей относительно дизайна кода. как можно создать такой код, который можно масштабировать для нескольких вопросов.
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
}
Ответ №1:
Вы можете создать структуру с желаемой информацией, а затем создать элементарные данные типа 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
}
Комментарии:
1. Спасибо, Наго, все еще ваш код перенастраивает ошибку: ожидаемое объявление в строке ниже: var trivia: [Int: QuestionsAndAnswers] = [:]
2. используете ли вы swift 3? Я пробую это на игровой площадке, и у меня нет никаких проблем!
3. И вы объявили структуру QuestionsAndAnswers? ссылка на изображение По этой ссылке вы можете увидеть изображение кода без ошибок.