下面我有一个tableView委托方法
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
lessonView?.lessonName = (capturedLessons?[indexPath.row].name)!
lessonView?.instructorGradedTracked = capturedLessons![indexPath.row].instructorGraded!
lessonView?.expectedCompletionTimeTracked = capturedLessons![indexPath.row].expectedCompletionTime!
self.present(self.lessonView!, animated: true, completion: nil)
}
lessonName: String
instructorGraded: Bool
expectedCompletionTime: Int
我在设置bool和int值是否为nil时遇到麻烦。实施此错误处理的最佳实践方法是什么?
答案 0 :(得分:1)
您可以尝试
guard let item = capturedLessons?[indexPath.row] ,let name = item.name, let graded = item.instructorGraded , let completionTime = item.expectedCompletionTime else { return }
lessonView?.lessonName = name
lessonView?.instructorGradedTracked = graded
lessonView?.expectedCompletionTimeTracked = completionTime
self.present(self.lessonView!, animated: true, completion: nil)
答案 1 :(得分:0)
尝试以下安全包装:
tableView.deselectRow(at: indexPath, animated: true)
guard let lessonView = lessonView,
let lesson = capturedLesson?[indexPath.row],
let name = lesson.name,
let graded = lesson.instructorGraded,
let completionTime = lesson.expectedCompletionTime
else {
// could not unwrap: something is nil
return
}
lessonView.lessonName = name
lessonView.instructorGradedTracked = graded
lessonView.expectedCompletionTimeTracked = completionTime
self.present(lessonView, animated: true)
这样做的好处是您没有!
闲逛,它们可能是nil
,并且在强行打开包装时会导致应用崩溃。