消除强制向下转型
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
,为您执行此转换。
我正在使用 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
,为您执行此转换。