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

时间:2018-06-18 17:08:07

标签: ios swift

Loads of answers(还有here以及更多)关于条件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

的错误

任何帮助表示感谢: - )

1 个答案:

答案 0 :(得分:1)

析取类型集(" OR"多种类型)在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
}

// ...