在Swift中返回instancetype

在Swift中返回instancetype,第1张

概述我试图做这个扩展: extension UIViewController{ class func initialize(storyboardName: String, storyboardId: String) -> Self { let storyboad = UIStoryboard(name: storyboardName, bundle: nil) 我试图做这个扩展:
extension UIVIEwController{    class func initialize(storyboardname: String,storyboardID: String) -> Self    {        let storyboad = UIStoryboard(name: storyboardname,bundle: nil)        let controller = storyboad.instantiateVIEwControllerWithIDentifIEr(storyboardID) as! Self        return controller    }}

但我得到编译错误:

error: cannot convert return Expression of type ‘UIVIEwController’ to
return type ‘Self’

可能吗?我也想做为init(storyboardname:String,storyboardID:String)

类似于 Using ‘self’ in class extension functions in Swift,您可以定义一个通用辅助方法,从调用上下文中推断self的类型:
extension UIVIEwController{    class func instantiateFromStoryboard(storyboardname: String,storyboardID: String) -> Self    {        return instantiateFromStoryboardHelper(storyboardname,storyboardID: storyboardID)    }    private class func instantiateFromStoryboardHelper<T>(storyboardname: String,storyboardID: String) -> T    {        let storyboard = UIStoryboard(name: storyboardname,bundle: nil)        let controller = storyboard.instantiateVIEwControllerWithIDentifIEr(storyboardID) as! T        return controller    }}

然后

let vc = MyVIEwController.instantiateFromStoryboard("name",storyboardID: "ID")

编译,类型推断为MyVIEwController。

Swift 3的更新:

extension UIVIEwController{    class func instantiateFromStoryboard(storyboardname: String,storyboardID: String) -> Self    {        return instantiateFromStoryboardHelper(storyboardname: storyboardname,bundle: nil)        let controller = storyboard.instantiateVIEwController(withIDentifIEr: storyboardID) as! T        return controller    }}
总结

以上是内存溢出为你收集整理的在Swift中返回instancetype全部内容,希望文章能够帮你解决在Swift中返回instancetype所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1055595.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存