【发布时间】:2016-01-25 17:15:18
【问题描述】:
我想(静态地)根据启动参数定义一个全局 Swift typealias。
Swift 让我可以用常量做到这一点:
protocol Client {
}
struct FakeAPIClient: Client {
}
struct ProductionAPIClient: Client {
}
private var isUITesting: Bool {
return NSProcessInfo.processInfo().arguments.contains("UI-TESTING")
}
let APIClient: Client.Type = isUITesting ? FakeAPIClient.self : ProductionAPIClient.self
如何使用 typealiases 实现相同的目标?我想做类似的事情:
struct FakeAPIClient {
}
struct ProductionAPIClient {
}
private var isUITesting: Bool {
return NSProcessInfo.processInfo().arguments.contains("UI-TESTING")
}
typealias Client = isUITesting ? FakeAPIClient : ProductionAPIClient
但这不能编译。有没有办法做到这一点?
【问题讨论】:
-
你不是在描述一个泛型吗?当然,细节取决于你想用这个动态解析的类型做什么。
-
只调用
ProductionAPIClient和FakeAPIClient共有的静态方法。可以只用泛型来完成吗? -
你不能在运行时定义“静态”的东西。 “静态”意味着它是在编译时定义的。这就是静态和动态的区别。
-
你的问题的问题在于你没有解释你最终想要做什么。正如我所说,这可能通过通用或协议采用来解决,但我不知道您要解决什么。
标签: ios xcode swift macos type-alias