在 Segue 中使用“OR”构造函数 - Swift
Posted
技术标签:
【中文标题】在 Segue 中使用“OR”构造函数 - Swift【英文标题】:Using "OR" constructor in Segue - Swift 【发布时间】:2018-06-18 17:08:06 【问题描述】:Loads of answers(还有here 等等)关于触发一些不同功能的条件转场,但我想要做的只是使用 OR 运算符说“如果转场目标是这个或这个,那么去这里”(要传递的值等保持不变)。
我正在尝试这个:
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】:类型的分离集(多种类型的“或”)在 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
// ...
【讨论】:
非常感谢 - 扩展是否只是在“发送”VC 中自行放入代码中?以及它在哪里说“设置” - 那是在寻找什么? 这是一个简单的协议要求。它正在寻找具有这些名称的存储或计算属性的符合类型。我认为两个视图控制器都已经拥有它们,因此我没有在扩展中添加任何主体 谢谢 - 我想我快到了 - 但我现在在选角部分得到“无法分配给属性:'destVC' 是一个 'let' 常量” - 有什么想法吗? 您可能希望将协议限制为仅适用于类,尤其是UIViewController
。 protocol SomeProtocol: UIViewController ...
对不起,我正在尝试这个......协议 SeguePreparation:UIViewController 并收到错误“非类类型 'SeguePreparation' 不能从类 'UIViewController' 继承”以上是关于在 Segue 中使用“OR”构造函数 - Swift的主要内容,如果未能解决你的问题,请参考以下文章
通过Visual C ++编译器识别ARM软件中断(SWI)函数