嵌套在类中的Swift协议

Axe*_*min 15 swift swift-protocols

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

class MyViewController : UIViewController {

    protocol Delegate {
        func eventHappened()
    }

    var delegate:MyViewController.Delegate?

    private func myFunc() {
        delegate?.eventHappened()
    }
}
Run Code Online (Sandbox Code Playgroud)

但是编译器不会允许它:

声明仅在文件范围内有效

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

Str*_*ers 18

根据迅速的文件

Swift允许您定义嵌套类型,从而在它们支持的类型的定义中嵌套支持枚举,类和结构.

鉴于协议不在该列表上,似乎它目前不受支持.他们有可能在某些时候添加这个功能,(Swift宣布不到两年就会发布).任何关于为什么他们不会或不会的想法将是我的猜测.


小智 6

这是我的工作:

  protocol MyViewControllerDelegate : class {
     func eventHappened()
  }
  class MyViewController : UIViewController {
     typealias Delegate = MyViewControllerDelegate
     weak var delegate: Delegate?

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

  }
Run Code Online (Sandbox Code Playgroud)

  • 对我来说似乎不是一种解决方法,而是唯一可能的方法)) (2认同)