Swift 协议(protocol)嵌套在一个类中

标签 swift swift-protocols

我想在我的类中嵌套一个协议(protocol)来实现委托(delegate)模式,如下所示:

class MyViewController : UIViewController {

    protocol Delegate {
        func eventHappened()
    }

    var delegate:MyViewController.Delegate?

    private func myFunc() {
        delegate?.eventHappened()
    }
}

但是编译器不允许:

Protocol 'Delegate' cannot be nested inside another declaration

我可以通过在类范围之外声明 MyViewControllerDelegate 来轻松地使其工作。
我的问题是为什么这样的限制?

最佳答案

根据swift documenation

Swift enables you to define nested types, whereby you nest supporting enumerations, classes, and structures within the definition of the type they support.

鉴于协议(protocol)不在该列表中,目前似乎不支持它。 他们有可能在某个时候添加该功能(毕竟 Swift 发布不到 2 年)。关于他们为什么不会或没有的任何想法都是我的猜测。

关于Swift 协议(protocol)嵌套在一个类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36066548/

相关文章:

block - 如何在 swift 中使用 NSURLConnection completionHandler

ios - 如何从 Objective-C 调用 swift 泛型函数

swift - Swift 通用协议(protocol)注入(inject)可能吗?

swift - 在 Swift 中,您能否创建一个仅在特定条件满足相关类型时才需要特定功能的协议(protocol)?

ios - 协议(protocol)扩展在 Swift 中是如何工作的?

ios - 如何集成AdMob作为iAds的备份?

arrays - 元素未从 FireBase 附加到数组

ios - 如何使用 swift 中的闭包而不是委托(delegate)将数据从一个 VC 传递到另一个 VC?

ios - 没有泛型约束的协议(protocol)中的泛型数组

swift - AnyObject 尝试转换为 Equatable