gpt4 book ai didi

ios - 创建一个通用的 UViewController 初始化器

转载 作者:搜寻专家 更新时间:2023-10-31 19:28:36 25 4
gpt4 key购买 nike

我正在尝试创建一个可用于初始化新实例的 UIViewController 扩展。对于我项目中的每个 View Controller ,我都有一个相应的 Storyboard。

EditSomethingViewController.swift
EditSomethingViewController.storyboard

这是我目前所拥有的:

extension UIViewController {

static func initalize() -> UIViewController? {
let name = String(self)

let storyboard = UIStoryboard(name: name, bundle: nil)

return storyboard.instantiateInitialViewController()
}

}

然而,这意味着当我使用它时,我仍然必须转换响应。

if let viewController = EditSomethingViewController.initalize() as? EditSomethingViewController {
// do something with view controller here
}

是否可以以无需转换响应的方式创建扩展?

附注正在处理一个用 Swift 2.3 编写的旧项目,希望得到支持的答案。

最佳答案

我使用这个扩展:

extension UIViewController
{
class func instantiateFromStoryboard(_ name: String = "Main") -> Self
{
return instantiateFromStoryboardHelper(name)
}

fileprivate class func instantiateFromStoryboardHelper<T>(_ name: String) -> T
{
let storyboard = UIStoryboard(name: name, bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: String(describing: self)) as! T
return controller
}
}

用法:

let controller = MyViewController.instantiateFromStoryboard()

关于ios - 创建一个通用的 UViewController 初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43874430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com