消除强制向下转型

Eliminating forced downcasts

我正在使用 swiftlint 作为一种更好地编写代码的方法,并且在大多数情况下,我已经能够糊涂到以下代码,其中包括强制向下转换:

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

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

强制转换的替代方法是使用 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 的内容,更好的选择是为您的 MultipleChoiceQuestion 类型实施 Decodable,为您执行此转换。