ios - Swift 中的多个泛型参数
<p><p>我想在 swift 中有一个函数,它需要两个参数,它们必须有一些基类并且每个参数都面对不同的协议(protocol)。</p>
<pre><code>class func createContainerViewController<T:UIViewController, U:UIViewController>(withCenterViewController centerViewController: T, andLeftViewController leftViewController: U) -> ContainerViewController where T: CenterViewController, U: SidePanelViewController
</code></pre>
<p>但是每当我尝试使用这样的方法时:</p>
<pre><code>let left: SidePanelViewController = UIStoryboard.leftViewController()!
let center: EventsListViewController = UIStoryboard.eventsListViewController()!
let containerViewController = ContainerViewController.createContainerViewController(withCenterViewController: center, andLeftViewController: left)
</code></pre>
<p>Xcode 给我一个错误</p>
<blockquote>
<p>Generic parameter 'T' could not be inferred</p>
</blockquote>
<p>变量 center 和 left 都是类的实例,它们继承自 UIViewController 并面对 T 或 U 所需的协议(protocol)。</p>
<p>createContainerViewController函数中的使用:</p>
<pre><code>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
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>这应该可行。</p>
<pre><code>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()
}
}
</code></pre></p>
<p style="font-size: 20px;">关于ios - Swift 中的多个泛型参数,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/39635132/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/39635132/
</a>
</p>
页:
[1]