当instantiateViewController我想动态引用类的故事板标识符是基于一个条件配对。我能够在实例化时传递图像文字的字符串名称,但不是viewController swift类?我得到的错误是Cannot find type 'viewControllers' in scope
例如:
var tabImage: String?
var viewControllers: UIViewController?
let tabBarController = CBFlashyTabBarController()
tabBarController.viewControllers = filteredNavigation.map { arrayProperty -> UIViewController in
if (arrayProperty.navname == "View1") {
print("View1")
tabImage = "tab1"
viewControllers = ViewController1
}
else if (arrayProperty.navname == "View2") {
print("View2")
tabImage = "tab2"
viewControllers = ViewController2
}
那么我可以在实例化时传递条件的结果:
let controller = storyboard!.instantiateViewController(withIdentifier: String(arrayProperty.navigationid)) as! viewControllers
controller.view.backgroundColor = UIColor.white
controller.navigationItem.title = arrayProperty.navname
controller.tabBarItem = UITabBarItem(title: arrayProperty.navname, image: #imageLiteral(resourceName: tabImage!), tag: 0)
controllerArray.append(controller)
return controller
这一行:
let controller = storyboard!.instantiateViewController(withIdentifier: String(arrayProperty.navigationid)) as! viewControllers
Swift需要在编译时为变量controller
分配一个类型。该类型必须是明确的。
"as!
"后必须为类型名。这里你给出了一个变量(所以它不是一个类型名——正是错误消息告诉你的),你似乎希望在运行时改变这个值,而类型必须在编译时确定。
总之,你要做的事不能那样做。
更重要的是,这段代码不会编译:
class ViewController1 : UIViewController {
}
var viewControllers : UIViewController?
viewControllers = ViewController1
声明viewControllers
是对UIViewController
的实例的引用(可选引用)。ViewController1
是一个类,而不是一个实例,所以这会产生一个编译错误:
不能分配类型为'ViewController1 '的值。打字对打字ui的