如何将覆盖函数插入到 if else 语句中
Posted
技术标签:
【中文标题】如何将覆盖函数插入到 if else 语句中【英文标题】:How to insert a override function into a if else statement 【发布时间】:2017-01-07 22:14:08 【问题描述】:我意识到,使用基本逻辑我不能将覆盖函数放入 if else 语句中,因为它会覆盖所有内容。但是我仍然需要在 if else 语句中加入为 segue 做准备。因此,我正在工作的代码的工作方式是,如果用户两次点击按钮,他们就赢得了比赛,因此转到显示分数的获胜者视图控制器。如果他们输了,他们会去一个没有分数的视图控制器。所以我需要把覆盖函数segue放在updateTimer()
,在else if counter < 9.9 && level == 2
部分。
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
let DestViewController : winViewController = segue.destination as! winViewController
DestViewController.LebelText = labelx.text!
func updateTimer()
counter += 0.1
labelx.text = String(format: "%.1f", counter)
if counter > 10 && level < 2
let next = self.storyboard?.instantiateViewController(withIdentifier: "loseViewController") as? loseViewController
self.present(next!, animated: true, completion: nil)
else if counter < 9.9 && level == 2
let nextc = self.storyboard?.instantiateViewController(withIdentifier: "winViewController") as? winViewController
self.present(nextc!, animated: true, completion: nil)
else
return
【问题讨论】:
我不太明白你在问什么,但我认为你想做的是在你的故事板中定义 segues,然后在你的 if 语句的两个分支中,调用performSegueWithIdentifier(sender:)
而不是instantiate..
和present...
。
【参考方案1】:
要建立以上 Jon 的评论,您甚至不应该调用 present(UIViewController:)
- 它甚至不会调用 prepare(for segue:)
方法。听起来您正在尝试做的是在某个时间检查一个条件,并根据该条件传递一些数据以呈现在目标视图控制器中。
如果你想使用 segue,最好的办法是设置一个 segue 标识符:
首先,您需要创建转场。将鼠标悬停在 Storyboard 中 VC 顶部的视图控制器图标上,然后按住控件并拖动到目标 VC:
然后选择segue的类型
之后,您需要为 segue 设置唯一标识符,以便您可以区分代码中的任何其他 segue。为此,请选择 segue 本身,然后转到检查器窗格并在“标识符”字段中键入唯一名称:
在为所需的两个 segue 完成此操作后,您可以将代码编辑为如下内容:
func updateTimer()
counter += 0.1
labelx.text = String(format: "%.1f", counter)
if counter > 10 && level < 2
// Use first unique segue identifier
self.performSegue(withIdentifier: "identityA", sender: self)
else if counter < 9.9 && level == 2
// Use second unique identifier
self.performSegue(withIdentifier: "identityB", sender: self)
现在您可以在 prepare(for segue:)
中添加特殊代码,并且您可以使用您在 Interface Builder 中指定的唯一标识符来区分并为不同的目标 VC 添加特殊代码
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if segue.identifier == "identityA"
let destinationA: winViewController = segue.destination as! winViewController
destinationA.LebelText = labelx.text
else if segue.identifier == "identityB"
let destinationB: loseViewController = segue.destination as! loseViewController
destinationB.LebelText = labelx.text
【讨论】:
以上是关于如何将覆盖函数插入到 if else 语句中的主要内容,如果未能解决你的问题,请参考以下文章
如何使用python将and else语句添加到for循环中的if作为lambda的一部分
一万个if..........else....语句,请问如何去优化它。。。。以提升性能效率