如何制作两个segue覆盖函数?
@IBAction func doneBut(_ sender: UIButton) {
print("Done")
if pointInput.text!.characters.count < 500 {
self.performSegue(withIdentifier: "toResult", sender: self)
}
else {
self.performSegue(withIdentifier: "toWinner", sender: self)
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "toResult" {
if segue.destination is ResultViewController {
}
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "toWinner" {
if segue.destination is ResultViewController {
}
}
}
当我执行另一个覆盖功能时 - 错误是
'prepare(for:sender :)'已被覆盖
答案 0 :(得分:5)
您只能覆盖一次。使用if
语句匹配不同的标识符。试试这个。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "toResult" {
if segue.destination is ResultViewController {
}
} else if segue.identifier == "toWinner" {
if segue.destination is ResultViewController {
}
}
}
答案 1 :(得分:1)
不,你不应该两次写相同的功能。这正是这个错误所说的。
'prepare(for:sender :)'已被覆盖
该功能已被覆盖。
尝试这样写:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "toResult" {
if segue.destination is ResultViewController {
}
else if segue.identifier == "toWinner" {
if segue.destination is ResultViewController {
}
}
}
答案 2 :(得分:1)
您必须仅覆盖prepare(for
一次,并通过switch
上的identifier
来区分这些细分:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
switch segue.identifier {
case "toResult":
let destination = segue.destination as! ResultViewController
// prepare something
case "toWinner":
let destination = segue.destination as! ResultViewController
// prepare something
default: break
}
}
要在Int
值上切换输入,请使用此版本进行类型检查:
@IBAction func doneBut(_ sender: UIButton) {
print("Done")
guard let inputText = pointInput.text, let inputInt = Int(inputText) else {
// inform the user about the error if needed
return
}
if inputInt < 500 {
self.performSegue(withIdentifier: "toResult", sender: self)
} else {
self.performSegue(withIdentifier: "toWinner", sender: self)
}
}
答案 3 :(得分:0)
让我们尝试从错误消息中了解您的问题。
&#39;准备(对于:发送方:)&#39;已经被覆盖了
你不能拥有相同的方法(具有相同的定义),然后在同一个类中使用相同的方法,而不是OOP。
<小时/> 假设在早上你的父亲说,#34;在上午8点,你必须去学校,如何&#34;。
现在你变得混乱和愤怒,因为你不知道你将在上午8点做什么? 这也是您的编译器所发生的事情,并显示错误,请告诉我当您调用此函数时要做的事情&#34; prepare(for:sender :)&#34;
<小时/>
您已经知道问题的解决方案,所以不要在此发布。
在这里,我只是想让你知道如果我们理解它很容易解决我们的问题。
我认为vadian为你提供了很好的解决方案,