QuizKit 1.0.2

QuizKit 1.0.2

Stephen Radford 维护。



QuizKit 1.0.2

QuizKit for iOS and tvOS

License: MIT CocoaPods


关于

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方法接受一个可选的问题,以便返回下一个正确的问题。根据它是会话中的最后一个问题,返回一个QKQuestionnil

目前有一个选项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。
  • 添加示例应用程序。