ios - 无法推断通用参数“T” - 泛型问题
问题描述
我有一个名为 openApp 的类,这意味着使用重定向 url 和商店工具包打开另一个应用程序。我对泛型不太熟悉,它让我遇到了这个错误
无法推断通用参数“T”
我没有T
正确处理使用吗?我真的不明白这里发生了什么。
public class openApp {
static func openOrDownloadPlayPortal<T>(delegate: T) where T: SKStoreProductViewControllerDelegate, T:
UIViewController {
let storeProductVC = SKStoreProductViewController()
let playPortalURL = URL(string: "redirect url")!
if UIApplication.shared.canOpenURL(playPortalURL) {
UIApplication.shared.openURL(playPortalURL)
}
else {
let vc = SKStoreProductViewController()
let params = [
SKStoreProductParameterITunesItemIdentifier: "app identifier"
]
vc.loadProduct(withParameters: params) { success, err in
if let err = err {
}
}
vc.delegate = delegate
delegate.present(vc, animated: true, completion: nil)
}
}
}
解决方案
由于调用openOrDownloadPlayPortal
方法时出现问题:
openApp.openOrDownloadPlayPortal(delegate: self)
您将面临上述错误:
无法推断通用参数“T”
如果您的课程不符合SKStoreProductViewControllerDelegate
. 例如,假设您在ViewController
课堂上调用它,如下所示:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
openApp.openOrDownloadPlayPortal(delegate: self)
}
}
因此,您必须确保ViewController
具有:
extension ViewController: SKStoreProductViewControllerDelegate {
// ...
}
错误的原因是:编译器假设方法中的T
参数openOrDownloadPlayPortal
必须符合SKStoreProductViewControllerDelegate
,因此实现
openApp.openOrDownloadPlayPortal(delegate: self)
意味着它不会被识别为 的适当类型T
,除非您self
(ViewController
在上面的示例中)使其符合SKStoreProductViewControllerDelegate
.
推荐阅读
- javascript - 你将如何重写这 3 个函数,以便它可以被一个函数调用?
- javascript - 数据映射错误:“未捕获的类型错误:无法读取未定义的属性 'equirectangular'”
- r - 将 tbl_df 转换为 ts
- javascript - $(document).ready() 中的代码没有准备好
- python - tradingview 的 pine 脚本转换 python
- java - 从 Java 到 Web 浏览器的 SSE
- sql - 连接字符串的 " 太多
- laravel - 如何更新 laravel 中的可翻译模型?
- c# - 如何使用 AAD Graph 在 AAD 中创建动态组
- remedy - BMC 通过 rest api 补救事件字段验证规则