我一直在尝试编写一个使用 3 个参数的函数来加载 View Controller ,但我一直无法让它工作。
我是编码新手,我正在阅读使用 2 个 View Controller (登录和聊天)的教程。为了从一个转到另一个,指南告诉我无论我想登录还是注销都使用这个:
@IBAction func loginDidTapped(_ sender: Any) {
// A
let storyboard = UIStoryboard (name: "Main", bundle: nil)
// B
let logVC = storyboard.instantiateViewController(withIdentifier: "LoginVC") as! LoginViewController
// C
let appDelegate = UIApplication.shared.delegate as! AppDelegate
// D
appDelegate.window?.rootViewController = logVC
}
如果我想登录或注销,我必须更改 3 件事:
- logVC ,我称之为 var1,用于//B ,//D
- "LoginVC" ,我称之为 var2,用于//B
- LoginViewController ,我称之为 var3,用于//B
在我的新思维中,我想象我可以创建一个包含 "A, B, C, D" 行的函数,让我以后只需更改 "即可在任何地方调用它var1, var2, var3" 参数
这是我第一次使用 var1 和 var2 创建的:
import Foundation
import UIKit
import FirebaseAuth
class Helper {
static let helper = Helper()
func loadView (var1 : String , var2 : String) {
let storyboard = UIStoryboard (name: "Main", bundle: nil)
let var1 = storyboard.instantiateViewController(withIdentifier: var2) as! LoginViewController
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = var1
}
}
我这样调用它并且有效:
Helper.helper.loadView(var1: "logVC" , var2: "LoginVC")
现在,当我尝试在行//B 中使用 var3 时,在同一函数内,Xcode 会在 var3 下划线并显示此错误:
使用未声明的类型“var3”
这是添加 var3 参数后的样子:
func loadView (var1 : String , var2 : String , var3 : String) {
let storyboard = UIStoryboard (name: "Main", bundle: nil)
let var1 = storyboard.instantiateViewController(withIdentifier: var2) as! var3
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = var1
}
如果它有效的话,我会这样调用它:
Helper.helper.loadView(var1: "logVC" , var2: "LoginVC" , var3: "LoginViewController")
我想知道是否可以做我正在成像的事情,因为我将函数视为方程式,在方程式中我可以用我需要的信息替换变量。
提前谢谢大家。
最佳答案
你想多了。您真的需要 3 个变量吗?
实际上,您只需要一个。
让我们看看为什么。
B
中变量名真的很重要吗? B
末尾的 LoginViewController
真的需要存在吗?不,变量名只是一个变量名。更改它不会改变您的代码。不过,它可能会使您的代码更具可读性。 LoginViewController
也是如此。这只会导致 var1
成为 LoginViewController
类型。但这是不必要的,因为您稍后会将其分配给 rootViewController
。 rootViewController
是 UIViewController
类型,因此您可以传递任何 UIViewController
类型的变量。要了解有关此行为的更多信息,请查看多态性。
因此,您的方法就是这样:
func presentVC(name: String) {
let storyboard = UIStoryboard (name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: name)
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = vc
}
关于ios - 如何创建一个通用函数来加载 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43437924/