由于某些原因,这将为segue准备代码崩溃,因为newGridViewController为nil。有什么想法吗?
override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
if segue.identifier == "Grid" {
if let newGridViewController = segue.destination as? GridViewController
if savePhotoWithSlicer.isOn {
newGridViewController?.savePhotoWithSlicer = true
if (newGridViewController?.savePhotoWithSlicer)! { print("TRUE") }
}
}
}
最佳答案
你没说例外是什么,但我想是“意外地发现了零…”由第二行的力展开引起的,
我怀疑根本原因是条件下转换到GridViewController
失败,所以newGridViewController
实际上为零。由于在除最后一行之外的所有地方都使用条件展开,因此在该点之前不会发生崩溃。
更好的结构是使用if let...
条件下推:
if let newGridViewController = segue.destination as? GridViewController {
newGridViewController.savePhotoWithSlicer = savePhotoWithSlicer.isOn
if newGridViewController.savePhotoWithSlicer {
print("TRUE")
}
}
这将防止崩溃,但它可能仍然不会打印“TRUE”,因为我强烈怀疑
segue.destination
不是一个GridViewController
-您需要检查您的故事板,并确保您有适合您的场景的自定义类。更新
既然您现在已经说明segue会导致嵌入
GridViewController
的导航控制器,那么您可以使用它来获得所需的视图控制器:override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
if segue.identifier == "Grid" {
if let navController = segue.destination as? UINavigationController {
if let newGridViewController = navController.viewControllers.first as? GridViewController {
newGridViewController.savePhotoWithSlicer = savePhotoWithSlicer.isOn
if newGridViewController.savePhotoWithSlicer {
print("TRUE")
}
}
}
}
}
关于ios - 无法分配ViewController的Bool成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48431860/