0

我使用 swiftlint 作为一种更好地编码的方式,并且在大多数情况下,我已经能够通过以下代码混淆我的方式,其中包括强制向下转换:

let questionToAdd = MultipleChoiceQuestion(question: dictionary["Question"] as! String,
            correctAnswer: dictionary["CorrectAnswer"] as! String,
            answers: dictionary["Answers"] as! [String])
           questions.append(questionToAdd)

我一直无法删除强制展开。任何建议将不胜感激。我已经尝试使用 ELSE { return } 但这也不起作用,可能是我的结构方式..尽管如此,任何帮助或指出我正确的方向将不胜感激。

4

1 回答 1

1

强制转换的替代方法是使用as?. 通常,您会解开这些强制转换的结果,然后使用这些值,如下所示:

guard let question = dictionary["Question"] as? String, 
    let answer = dictionary["CorrectAnswer"] as? String,
    let answers = dictionary["Answers"] as? [String] else { return }

questions.append(MultipleChoiceQuestion(question: question, answer: answer, answers: answers))

但是,由于看起来您正在解码 JSON 之类的东西,因此更好的选择是为您的类型实现Decodable为您MultipleChoiceQuestion执行此转换。

于 2020-02-16T00:31:58.587 回答