如何在Swift中对两种类型进行协议扩展约束

avi*_*ara 5 ios swift

我有一个协议及其相应的扩展,看起来像这样:

import Foundation


protocol HelpActionManageable {
    typealias ItemType : UIViewController,HelpViewControllerDelegate
    var viewController : ItemType {
        get
    }
}

extension HelpActionManageable  {
    func presentHelpViewController() {
        let helpViewController = HelpViewController(nibName: HelpViewController.nibName(), bundle: nil)
        viewController.presentViewController(helpViewController, animated: true, completion:nil)
        helpViewController.delegate = viewController
    }
    func dismissSuccessfulHelpViewController(helpViewController:HelpViewController) {
        helpViewController.dismissViewControllerAnimated(true) { () -> Void  in
            self.viewController.showAlertControllerWithTitle(GlobalConstants.Strings.SUCCESS, message: GlobalConstants.Strings.VALUABLE_FEEDBACK, actions: [], dismissingActionTitle: GlobalConstants.Strings.OK, dismissBlock: nil)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,在随机视图控制器中确认了这个协议,我做的是这样的:

class RandomViewController : UIViewController, HelpViewControllerDelegate,HelpActionManageable {
    //HelpViewControllerDelegate methods...
    var viewController : RandomViewController {
        return self
    }
}
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但如果扩展HelpActionManageable方法仅适用于确认UIViewControllerAND的类型,那么它将非常简洁HelpViewControllerDelegate.

像这样的东西:

extension HelpActionManageable where Self == ItemType
Run Code Online (Sandbox Code Playgroud)

这不起作用.我怎样才能在Swift中实现这一目标?

JMI*_*JMI 3

我想现在这个已经得到支持了。

extension HelpActionManageable where Self == ItemType  {
}
Run Code Online (Sandbox Code Playgroud)

或者

extension HelpActionManageable where Self: ItemType  {
}
Run Code Online (Sandbox Code Playgroud)

对我有用。