cap*_*low 5 generics ios swift
我想在 swift 中有函数,它需要两个参数,这些参数必须有一些基类,每个参数都面对不同的协议。
class func createContainerViewController<T:UIViewController, U:UIViewController>(withCenterViewController centerViewController: T, andLeftViewController leftViewController: U) -> ContainerViewController where T: CenterViewController, U: SidePanelViewController
Run Code Online (Sandbox Code Playgroud)
但是每当我尝试使用这样的方法时:
let left: SidePanelViewController = UIStoryboard.leftViewController()!
let center: EventsListViewController = UIStoryboard.eventsListViewController()!
let containerViewController = ContainerViewController.createContainerViewController(withCenterViewController: center, andLeftViewController: left)
Run Code Online (Sandbox Code Playgroud)
Xcode 给我一个错误
无法推断通用参数“T”
变量 center 和 left 都是继承自 UIViewController 的类的实例,并面对所需的 T 或 U 协议。
在 createContainerViewController 函数中的用法:
let container = ContainerViewController()
container.centerViewController = centerViewController
var centerViewController = container.centerViewController as! CenterViewController
centerViewController.delegate = container
container.leftViewController = leftViewController
var leftViewController = container.leftViewController as! SidePanelViewController
leftViewController.delegate = container
return container
Run Code Online (Sandbox Code Playgroud)
这应该有效。
protocol CenterViewController {}
protocol SidePanelViewController {}
class Center: UIViewController, CenterViewController {}
class Left: UIViewController, SidePanelViewController {}
class ContainerViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let center = Center()
let left = Left()
let _ = ContainerViewController.createContainerViewController(withCenterViewController: center, andLeftViewController: left)
}
class func createContainerViewController<T:UIViewController, U:UIViewController>(withCenterViewController centerViewController: T, andLeftViewController leftViewController: U) -> ContainerViewController where T: CenterViewController, U: SidePanelViewController {
return ContainerViewController()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4622 次 |
| 最近记录: |