【发布时间】:2017-08-29 11:50:28
【问题描述】:
我有一个 抽象 class 这样定义:
class BaseCoordinator<ResultType>
其他类继承自这个例如。
final class AppCoordinator: BaseCoordinator<Void>
final class AuthFlowCoordinator: BaseCoordinator<AuthFlowCoordinationResult>
final class MainFlowCoordinator: BaseCoordinator<Void>
现在我想创建一个 factory 方法。我猜它的签名应该是这样的:
func makeCoordinator<T>() -> BaseCoordinator<T>
但是,当然,我会收到这样的错误:
Cannot convert return expression of type 'AppCoordinator' to return type 'BaseCoordinator<T>'
Xcode 建议我添加as! BaseCoordinator<T>,但我讨厌这种强制向下转换(返回? 也不能让我满意,因为我100% 确定我会有一个正确的默认对象),因为我希望保证至少会返回默认的Coordinator。
感觉好像我错过了什么,但我真的不知道它是什么。是否真的可以制作这样的工厂方法,或者 Swift 泛型是否有限?
【问题讨论】:
-
你是如何实现工厂方法的?你只是检查
T是什么并返回相应子类的实例吗?
标签: swift generics inheritance factory