如何:在呈现ViewController之前检查每个值是否为零

时间:2019-12-16 20:38:58

标签: ios swift tableview

下面我有一个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时遇到麻烦。实施此错误处理的最佳实践方法是什么?

2 个答案:

答案 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,并且在强行打开包装时会导致应用崩溃。