swift - 返回类的动态类型的静态函数
问题描述
我正在遵循一个设计,其中每个视图控制器都是在自己的故事板上设计和配置的。例如MyViewController
将被安置MyViewController.storyboard
并分配标识符MyViewController
。这种一致的命名允许我编写一个方便的扩展UIViewController
:
extension UIViewController {
static func fromStoryboard(_ storyboard: UIStoryboard? = nil, identifier: String? = nil) -> UIViewController {
let className = NSStringFromClass(self).components(separatedBy: ".").last!
let storyboard = storyboard ?? UIStoryboard(name: className, bundle: nil)
let identifier = identifier ?? className
return storyboard.instantiateViewController(withIdentifier: identifier)
}
}
每当我需要控制器时,我都可以这样称呼它:
let vc = MyViewController.fromStoryboard() as! MyViewController
我的问题是:我怎样才能改变函数,以便我可以删除as!
演员并仍然拥有vc
type MyViewController
?换句话说,我想做的是:
let vcA = ViewControllerA.fromStoryboard() // vcA is of type ViewControllerA
let vcB = ViewControllerB.fromStoryboard() // vcB is of type ViewControllerB
解决方案
推荐阅读
- google-apps-script - 如何在 G Suite 中包含的工作表中授予模态对话框弹出的权限
- excel - 更新 - 请参阅编辑摘要:VBA 新手:代码很慢,在完成之前进入 Excel“无响应”
- bash - 将文件中的每个单词存储在数组中(在 bash 中)
- amazon-web-services - CloudFormation 角色使用 QueuePolicy Ref 作为 IAM 角色资源中的 ManagedPolicy?
- c++ - Linked Set ADT 实现问题
- android - lateinit 属性适配器尚未初始化设置 RecyclerView 与 Fragment
- flutter - Flutter - 在页面之间发送数据和定义附加数据
- elixir - 强制 Phoenix 呈现 JSON 错误
- apache-nifi - Nifi从csv列值获取文件名
- fabricjs - 在 viewportTransform 可视化之外隐藏对象