gpt4 book ai didi

ios - 无法推断通用参数 'T' - 泛型问题

转载 作者:行者123 更新时间:2023-11-28 10:37:06 25 4
gpt4 key购买 nike

我有一个名为 openApp 的类,它意味着使用重定向 URL 和存储工具包打开另一个应用程序。我不太熟悉泛型,它让我遇到了这个错误

Generic Parameter 'T' could not be inferred

我没有正确处理 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)

您将面临上述错误:

Generic parameter 'T' could not be inferred

如果您的类符合SKStoreProductViewControllerDelegate。例如,假设您在 ViewController 类中调用它,如下所示:

class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()

openApp.openOrDownloadPlayPortal(delegate: self)
}
}

因此,您必须确保 ViewController 具有:

extension ViewController: SKStoreProductViewControllerDelegate {
// ...
}

错误原因是:编译器假定openOrDownloadPlayPortal方法中的T参数必须符合SKStoreProductViewControllerDelegate,因此实现

openApp.openOrDownloadPlayPortal(delegate: self)

意味着它不会被识别为 T 的适当类型,除非你制作 self(上例中的 ViewController)符合 SKStoreProductViewControllerDelegate

关于ios - 无法推断通用参数 'T' - 泛型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52970536/

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