繁体   English   中英

UIViewController中present()函数的Swift协议

[英]Swift Protocol for present() function in UIViewController

我想创建一个当前UIViewController.present函数符合的协议(委托)。

因此,例如协议是:

protocol PresentPopupDelegate
{
     func doSomething()
     func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Swift.Void)?)
}

需要遵守该协议的类是:

class MyViewController:UIViewController, PresentPopupDelegate {

       func doSomething()
}

并说我有以下代码:

let delegate:PresentPopupDelegate

init() {
    self.delegate = MyViewController()
}

编译这将导致警告说

未实现协议“ PresentPopupDelegate”中的方法“ present:animated:completion:”

现在,我假设原因是因为在原始函数中,将完成函数的默认参数设置为“ nil”。 但是,协议不支持默认参数。

因此,我的问题是:我可以(如果可以的话)如何创建UIViewController.present(...)函数可以遵循的协议?

类型不符合协议,只是因为它们具有正确的功能。 您必须明确地说出类型符合。 就您而言,这意味着添加:

extension UIViewController: PresentPopupDelegate {}

这里不需要机构,因为它已经有了正确的实现。

这种要求明确一致性的选择是Swift中的一个故意设计决定。 参见Ole Begemann对协议中推理的出色总结不只是袋语法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM