gpt4 book ai didi

swift - 如何在准备中的switch语句中使用可选绑定(bind)(segue :)

转载 作者:搜寻专家 更新时间:2023-10-31 22:29:53 25 4
gpt4 key购买 nike

在 swift 中,您可以使用 prepare(segue:) 中 switch 语句的一个很酷的功能来根据目标 View Controller 的类型创建案例:

例子:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
switch segue.destination {

case let detailViewController as DetailViewController:
detailViewController.title = "DetailViewController"
}
case let otherViewController as OtherViewController:
otherViewController.title = "OtherViewController"
}
}

但是,如果 segue 是由 Split View Controller 触发的,那么目的地是导航 Controller ,而您真正想要做的是打开导航 Controller 的顶 View Controller 的类?

我想做这样的事情:

case let nav as UINavigationController,
let detailViewController = nav.topViewController as? DetailViewController:
//case code goes here

我在多部分 if let 可选绑定(bind)中使用相同的构造。

那是行不通的。相反,我必须像这样做一个相当痛苦的构造:

case let nav as UINavigationController
where nav.topViewController is DetailViewController:
guard let detailViewController = nav.topViewController as? DetailViewController
else {
break
}
detailViewController.title = "DetailViewController"

这行得通,但它似乎不必要地冗长,并且模糊了意图。有没有办法在 Swift 3 中这样的 switch 语句中使用多部分可选绑定(bind)?

最佳答案

我想出了一个解决这个问题的好方法。

它涉及在 switch 语句之前进行一些设置,然后在 switch 语句中使用元组。这是它的样子:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let dest = segue.destination
let navTopVC = (dest as? UINavigationController)?.topViewController
switch (dest, navTopVC) {

case (_, let top as VC1):
top.vc1Text = "Segue message for VC1"

case (_, let top as VC2):
top.vc2Text = "Segue message for VC2"

case (let dest as VC3, nil):
dest.vc3Text = "Segue message for VC3"

default:
break
}
}

关于swift - 如何在准备中的switch语句中使用可选绑定(bind)(segue :),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40660228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com