在 Segue 中使用"OR"构造函数 - Swift



关于触发一些不同功能的条件 segue 的大量答案(也在这里和更多(,但我试图做的只是使用 OR 运算符说"如果 segue 目标是这个或这个,那么去这里"(要传递的值等保持不变(。

我正在尝试这个:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
//if destination is VC1 OR VC2...
if let destVC = segue.destination as?
FavouriteDetailViewController || FavouriteExerciseDetailViewController
//... then pass the values as specified 
destVC.favouriteWorkoutPassed = workoutToPass
destVC.favouriteObjectPassed = favouriteObjectToPass
}

正如我认为 || 将充当"OR"运算符,但我收到错误Optional type 'FavouriteDetailViewController?' cannot be used as a boolean; test for '!= nil' instead

任何帮助感谢:-(

析取类型集(多种类型的"OR"ing(在 Swift 中表示为协议。

使用必要的属性/方法创建新协议:

protocol SomeProtocol { // FIXME: Name me properly
var favouriteWorkoutPassed: { get set }
var favouriteObjectPassed: { get set }
}

扩展所需的类型以符合此协议:

extension FavouriteDetailViewController: SomeProtocol {}
extension FavouriteExerciseDetailViewController: SomeProtocol {}

强制转换为协议类型:

// ...
if let destVC = segue.destination as? SomeProtocol
destVC.favouriteWorkoutPassed = workoutToPass
destVC.favouriteObjectPassed = favouriteObjectToPass
}
// ...

最新更新