无法推断通用参数 'T' - 泛型问题
Generic Paramter 'T' could not be inferred - Problems with generics
我有一个名为 openApp 的 class,意思是使用重定向 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
如果您的 class 不 符合 SKStoreProductViewControllerDelegate
。例如,假设您在 ViewController
class 中调用它,如:
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
)符合 [=15] =].
我有一个名为 openApp 的 class,意思是使用重定向 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
如果您的 class 不 符合 SKStoreProductViewControllerDelegate
。例如,假设您在 ViewController
class 中调用它,如:
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
)符合 [=15] =].