Ios 从函数';s返回类型
我有一个故事板和视图控制器。每个视图控制器的情节提要Id与指定给它的类名相同。like:为漫游视图控制器分配了漫游HVC类,其情节提要Id也是漫游HVC 我在下面做了一个函数,从情节提要中获取视图控制器的实例:Ios 从函数';s返回类型,ios,swift,swift2,Ios,Swift,Swift2,我有一个故事板和视图控制器。每个视图控制器的情节提要Id与指定给它的类名相同。like:为漫游视图控制器分配了漫游HVC类,其情节提要Id也是漫游HVC 我在下面做了一个函数,从情节提要中获取视图控制器的实例: func getViewController<T: UIViewController>() -> T? { let sb = UIStoryboard(name: "Main", bundle: nil) sb.instantiateViewCont
func getViewController<T: UIViewController>() -> T? {
let sb = UIStoryboard(name: "Main", bundle: nil)
sb.instantiateViewControllerWithIdentifier(viewController.rawValue) as? T
}
func getViewController()->T?{
设sb=UIStoryboard(名称:“Main”,捆绑:nil)
sb.实例化eviewController标识符(viewController.rawValue)为?T
}
有可能推断出T的类型吗?如果是,怎么做?我想这就是你想要的
class ViewControllers
{
class func getViewController<T : UIViewController>(fromStoryboard : String, fromClass : T) -> T?
{
let storyboard = UIStoryboard(name: fromStoryboard, bundle: nil)
let controller = storyboard.instantiateViewControllerWithIdentifier("\(fromClass)") as? T
return controller
}
}
类视图控制器
{
类func getViewController(从故事板:字符串,从类:T)->T?
{
let storyboard=UIStoryboard(名称:fromStoryboard,bundle:nil)
让controller=storyboard.instanceeviewcontrollerwhiteIdentifier(\(fromClass)”)作为?T
返回控制器
}
}
试试这个:
func getViewController<T: UIViewController>() -> T? {
var fullName: String = NSStringFromClass(T.self)
let range = fullName.rangeOfString(".", options: .BackwardsSearch)
if let range = range {
fullName = fullName.substringFromIndex(range.endIndex)
}
let sb = UIStoryboard(name: "Main", bundle: nil)
return sb.instantiateViewControllerWithIdentifier(fullName) as? T
}
func getViewController()->T?{
var fullName:String=NSStringFromClass(T.self)
让range=fullName.rangeOfString(“.”,选项:.BackwardsSearch)
如果let range=range{
fullName=fullName.substringFromIndex(range.endIndex)
}
设sb=UIStoryboard(名称:“Main”,捆绑:nil)
将某人实例化的eviewcontrollerwhiteIdentifier(全名)返回为?T
}
我不能那样推断。还没有解决办法,,
我使用了以下替代方案:
func getViewController<T: UIViewController>(ofType: T.Type) -> T? {
let sb = UIStoryboard(name: "Main", bundle: nil)
sb.instantiateViewControllerWithIdentifier("\(ofType)") as? T
}
你能举例说明我们如何使用这个函数吗?推断该解决方案不起作用的类型“(fromClass)”不会给出类名,而使用“(fromClass.classForCoder)”给出类名。
let viewController = getViewController(WalkThroughVC)