Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从函数';s返回类型_Ios_Swift_Swift2 - Fatal编程技术网

Ios 从函数';s返回类型

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

我有一个故事板和视图控制器。每个视图控制器的情节提要Id与指定给它的类名相同。like:为漫游视图控制器分配了漫游HVC类,其情节提要Id也是漫游HVC

我在下面做了一个函数,从情节提要中获取视图控制器的实例:

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)