菜鸟教程小白 发表于 2022-12-11 17:37:38

ios - Swift 中的多个泛型参数


                                            <p><p>我想在 swift 中有一个函数,它需要两个参数,它们必须有一些基类并且每个参数都面对不同的协议(protocol)。</p>

<pre><code>class func createContainerViewController&lt;T:UIViewController, U:UIViewController&gt;(withCenterViewController centerViewController: T, andLeftViewController leftViewController: U) -&gt; 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 &#39;T&#39; 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&lt;T:UIViewController, U:UIViewController&gt;(withCenterViewController centerViewController: T, andLeftViewController leftViewController: U) -&gt; 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]
查看完整版本: ios - Swift 中的多个泛型参数