解析一个符合协议的和对象的class
Resolving a class of and object that conforms to protocol
我想传递一个符合某些协议的对象,并使用 Swinject framwork(通过依赖注入)解析其分配类型。
protocol IViewModelAware {
typealias T
var viewModel : T { get set }
}
class ViewAndViewModelCreator {
var container : Container
init(container : Container) {
self.container = container
}
func resolveViewModel<T : IViewModelAware>(controller : T) {
let mirror = Mirror(reflecting: controller.viewModel)
let viewModelClassType = mirror.subjectType
let viewModel = self.container.resolve(viewModelClassType.self) // This line shows error
controller.viewModel = viewModel
}
}
错误:
无法使用类型为“(Any.Type)”
的参数列表调用 'resolve'
如何从确认协议的对象中获取 Class,也许除了反射之外还有其他选择?
您可以通过 controller.viewModel.dynamicType
:
从其实例中获取视图模型 class 的类型
func resolveViewModel<T : IViewModelAware>(controller : T) {
let viewModel = container.resolve(controller.viewModel.dynamicType)
// ...
}
我想传递一个符合某些协议的对象,并使用 Swinject framwork(通过依赖注入)解析其分配类型。
protocol IViewModelAware {
typealias T
var viewModel : T { get set }
}
class ViewAndViewModelCreator {
var container : Container
init(container : Container) {
self.container = container
}
func resolveViewModel<T : IViewModelAware>(controller : T) {
let mirror = Mirror(reflecting: controller.viewModel)
let viewModelClassType = mirror.subjectType
let viewModel = self.container.resolve(viewModelClassType.self) // This line shows error
controller.viewModel = viewModel
}
}
错误: 无法使用类型为“(Any.Type)”
的参数列表调用 'resolve'如何从确认协议的对象中获取 Class,也许除了反射之外还有其他选择?
您可以通过 controller.viewModel.dynamicType
:
func resolveViewModel<T : IViewModelAware>(controller : T) {
let viewModel = container.resolve(controller.viewModel.dynamicType)
// ...
}