XCode 预览 - 不支持的框架

问题描述 投票:0回答:1

这可能看起来是一个愚蠢的问题,但我在 XCode 项目中有一些不支持 iOS 模拟器(因此也不支持预览)的 Pod/框架。

有没有办法在预览时忽略这些框架? 80% 的项目没有使用该框架,但它对于那 20% 的框架仍然非常关键,而且它对我无法访问预览的开发相当阻碍,考虑到我通常只关心个人视图(也许还有下一个和上一个视图)查看)。

ios xcode swiftui frameworks preview
1个回答
0
投票

在编译时进行分支的类型擦除模式怎么样?

让我们看看这是你最初使用的框架。

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()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.