gpt4 book ai didi

ios - 在 Swift 2 中声明一个独立于特定泛型类型的变量

转载 作者:行者123 更新时间:2023-11-30 13:59:54 25 4
gpt4 key购买 nike

我正在编写一个 Web 包装 View Controller ,它根据运行它的 iOS 版本动态地使用最合适的 Web View 类:

protocol WebViewCommon: class {
func loadURL(url: NSURL)
func disableBouncing()
func haveLoadedPage() -> Bool
}

class WebWrapperViewController<T where T: UIView, T: WebViewCommon>: UIViewController {

var loginUrl: NSURL!
var webView: T!

// ...
}

然后我需要实例化正确的通用版本,如下所示:

    var webWrapperVC: WebWrapperViewController // compiler error

if #available(iOS 8.0, *) {
webWrapperVC = WebWrapperViewController<WKWebView>()
} else {
webWrapperVC = WebWrapperViewController<UIWebView>()
}

webWrapperVC.loginUrl = targetURL // access WebWrapperViewController specific API
self.window!.rootViewController = webWrapperVC

var 声明无法编译,并出现以下错误:

Reference to generic type 'WebWrapperViewController' requires arguments in <...>

到目前为止我已经尝试过:

    var webWrapperVC: WebWrapperViewController<UIView<WebViewCommon>>

(这会导致:“类型‘UIView’不符合协议(protocol)‘WebViewCommon’”)

    var webWrapperVC: WebWrapperViewController<T where T: UIView, T: WebViewCommon>

(结果是:“预期 '>' 来完成通用参数列表”)

因此,我的问题是:此实例中正确的 var 声明是什么? 因为我需要访问特定于 WebWrapperViewController 的 API , var 声明需要包含此类型。

最佳答案

我认为在这种情况下你不需要使用泛型。您可以使用一个协议(protocol)来代替。定义不带泛型的 View Controller ,并使用协议(protocol)作为 webView 的类型。

class WebWrapperViewController: UIViewController {

var loginUrl: NSURL?
var webView: WebViewCommon?

// ...
}

关于ios - 在 Swift 2 中声明一个独立于特定泛型类型的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33119867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com