这可能看起来是一个愚蠢的问题,但我在 XCode 项目中有一些不支持 iOS 模拟器(因此也不支持预览)的 Pod/框架。
有没有办法在预览时忽略这些框架? 80% 的项目没有使用该框架,但它对于那 20% 的框架仍然非常关键,而且它对我无法访问预览的开发相当阻碍,考虑到我通常只关心个人视图(也许还有下一个和上一个视图)查看)。
在编译时进行分支的类型擦除模式怎么样?
让我们看看这是你最初使用的框架。
class OriginalFramework {
func run() {
/// Don't know its function.
}
}
制定类型擦除抽象协议。
protocol AnyFramework {
// same function signatures originally used.
func run()
}
并实现模拟框架类。这将在预览时执行。
final class MockFramework: AnyFramework {
func run() {
print("run")
}
}
在OriginalFramework中采用Eraser协议。
// It must already implements all features of AnyFramework.
extension OriginalFramework: AnyFramework { }
您可以在编译时检测是否通过预览开始构建。所以在初始化器处分支。
final class FrameworkWrapper: AnyFramework {
private let framework: AnyFramework
#if targetEnvironment(simulator)
init(framework: MockFramework) {
self.framework = framework
}
#else
init(framework: OriginalFramework) {
self.framework = framework
}
#endif
func run() {
self.framework.run()
}
}
但是你必须使用OriginalFramework重命名所有地方(使用XCode可以很好地完成)。
struct ViewModel {
// private var framework: OriginalFramework - not anymore!
private var framework: FrameworkWrapper
func tap() {
self.framework.run()
}
}