【发布时间】:2016-04-15 19:05:23
【问题描述】:
如何将泛型类型存储在属性中,然后使用该类型属性传入方法?
我有一个工厂,它的方法接收视图控制器类型但返回该视图控制器的实例(容器负责处理)。
public protocol ViewControllerFactoryProtocol {
func getViewController<T: UIViewController>(type: T.Type) -> UIViewController
}
public class ViewControllerFactory: ViewControllerFactoryProtocol {
private let container: Container
public init(container: Container) {
self.container = container
}
public func getViewController<T: UIViewController>(type: T.Type) -> UIViewController {
return self.container.resolve(type)!
}
}
我有这样的财产
var destinationViewController: UIViewController.Type { get }
现在我想做类似的事情:
factory.getViewController(self.destinationViewController)
我将destinationViewController 声明为LoginViewController.self
但它不是那样工作的。奇怪的是,如果我直接这样做,它就可以工作:
factory.getViewController(LoginViewController.self)
有什么帮助吗??谢谢
【问题讨论】:
-
“但它不是那样工作的”:那它是如何工作的呢?或者错误信息是什么?
-
它只是抛出错误的访问错误。
-
您是否检查了
getViewController中的self.container.resolve(type)是否返回nil? -
是的,它返回 nil...
-
这就是它崩溃的原因。您正在尝试强制解包 nil 值。那么调试一下为什么返回nil。显然它应该返回一些对象。
标签: ios swift generics types controller