SFSafariViewController init 方法强制使用 iOS11 支持的版本

SFSafariViewController init method forced to use iOS11 supported version

随着 Xcode 9 Beta 和 iOS11 预览版的最新更新,SFSafariViewController init 方法发生了一些变化。

@available(iOS 11.0, *)
public init(url URL: URL, configuration: SFSafariViewController.Configuration)

@available(iOS, introduced: 9.0, deprecated: 11.0)
public convenience init(url URL: URL, entersReaderIfAvailable: Bool)

从 iOS11 开始支持一种新的 init 方法,而 iOS11 将弃用当前可用的 init 方法。问题是当前方法没有公开,无法覆盖。如果我们想使用测试版 运行 现有项目,这将强制使用新的 init 方法。有没有人找到在新的 Xcode Beta 中使用现有 init 方法的方法?

编辑:为了澄清,这是我子类

init方法的一个片段
class BPSafariViewController: SFSafariViewController {
    override init(url URL: URL, entersReaderIfAvailable: Bool) {
        super.init(url: URL, entersReaderIfAvailable: entersReaderIfAvailable)
        if #available(iOS 10.0, *) {
            preferredControlTintColor = UIColor.BPUIColor()
        } else {
            view.tintColor = UIColor.BPUIColor()
        }
    }
}

您可以在检查 iOS 版本时执行此操作,如下所示。

var safariController: SFSafariViewController?
if #available(iOS 11.0, *) {
    safariController = SFSafariViewController(url: URL(string: "your_url")!)
} else {
    safariController = SFSafariViewController(url: URL(string: "")!, entersReaderIfAvailable: true)
}

我找到了一个依赖于另一种 convenience 方法的可能解决方案。虽然我不能使用 entersReaderIfAvailable 选项,但它现在适用于我的应用程序。

convenience init(url URL: URL) {
    self.init(url: URL)
    //code
}

更改弃用的函数:

super.init(url: url, entersReaderIfAvailable: true) 

至:

let config = SFSafariViewController.Configuration()
config.entersReaderIfAvailable = true
    
super.init(url: url, configuration: config)