关于
QuizKit是为了能够快速开发本地或远程问答应用而构建的。它允许从JSON构建问答,并支持多种问题类型。它可以处理问题的随机化、会话和评分。
它在iOS和tvOS上运行得非常好。
目前不包括UI,但将很快提供示例应用程序,并且我愿意在未来包括即插即用的视图控制器。
文档
当使用QuizKit时,您可以看到三个核心类/结构体
QKQuiz
- 这是从JSON中加载的问答。它的唯一目的是加载到QKSession
中。您可能会构建一个具有多个问答的应用程序,这些问答可以是单独的JSON文件,也可以从远程服务器获取的JSON字符串加载。QKSession
- 这是您将与之交互的主要类。有一个共享实例可通过QKSession.default
访问。问答加载到会话中,从这里检索问题,提交响应。QKQuestion
- 单个问题在此模型中被包装。它包含有关问题、类型(使用QKQuestionType
)、图片和响应的信息。
问题类型
QuizKit目前支持以下问题类型,定义在QKQuestionType
上:
singleAnswer
- 这是一个开放性问题,非常适合用于文本框。multipleChoice
- 用于具有多个文本响应的问题。imageChoice
- 与multipleChoice
类似,但选择是图像而非文本。
加载测验并开始会话
有两种初始化方法可以加载测验,它们的作用相同。第一个方法可以通过将包含在您应用程序中的JSON文件的路径传递进来,第二个方法则直接接受一个JSON字符串。
下面的示例演示了如何从JSON文件中在UIViewController
上加载一个测验。
import QuizKit
class ExampleViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
loadQuiz()
}
func loadQuiz() {
guard let path = Bundle.main.path(forResource: "quiz", ofType: "json") else {
return
}
QKSession.default.limit = 10
if let quiz = QKQuiz(loadFromJSONFile: path) {
QKSession.default.load(quiz: quiz)
}
}
@IBAction func startQuiz(_ sender: Any) {
do {
try QKSession.default.start()
} catch {
fatalError("Quiz started without quiz set on the session")
}
if let question = QKSession.default.nextQuestion() {
// SHOW THE QUESTION VIEW HERE
}
}
}
示例中的startQuiz
方法已经通过界面构建器连接到一个按钮上。当用户点击该按钮时,会启动一个新的会话。
QKSession.default.nextQuestion
方法接受一个可选的问题,以便返回下一个正确的问题。根据它是会话中的最后一个问题,返回一个QKQuestion
或nil
。
目前有一个选项QKSession.default.limit
可以设置会话中的问题数量。
提交答案
通过QKSession.default.submit(response: String, for: QKQuestion)
方法输入问题的答案。第一个参数是用户给出的作为字符串的响应(对于图像选择题,提交图像的URL)。第二个参数是用户将响应的QKQuestion
实例。
QKSession.default.submit(response: "User Response Here", for: question)
获取分数
当用户完成测验后,可以从QKSession
获取分数。
除了作为整数值提供的用户答对的题目数量外,还有一个格式为7 / 10
的字符串。
let integerScore = QKSession.default.score
let stringScore = QKSession.default.formattedScore
如果您想向用户显示他们哪些问题答对了或答错了,还可以访问每个问题的单个结果。
let individualResults = QKSession.default.responses
示例
在此处可以获取一个示例JSON文件。
很快将提供一个示例应用程序。
安装
手册
QuizKit 现在使用 SwiftyJSON 来解析 JSON 文件和字符串。如果您想将 QuizKit 手动安装到项目中,您还需要包含 SwiftyJSON 以及此存储库中的 Sources
目录。
CocoaPods
CocoaPods 是一种更简单的方式来安装 QuizKit 和其依赖。只需在项目中的 Podfile
中包含以下内容。
pod 'QuizKit'
待办事项
- 可能实现项目内 JSON 解析以避免 SwiftyJSON 依赖。
- 添加其他初始化器,如 Quiz 的 CSV 或 Plist。
- 添加示例应用程序。