Swift泛型:非标称类型不支持显式初始化

Swift泛型:非标称类型不支持显式初始化,swift,generics,xcode9beta6,Swift,Generics,Xcode9beta6,所以我试图理解通用协议和类: protocol ListPresenterType where View.PDO.SW == Dispatcher.SW { associatedtype Dispatcher: ListDispatcherType associatedtype View: ListViewType init(dispatcher: Dispatcher, state: @escaping (_ state: AppState)->(ListSta

所以我试图理解通用协议和类:

protocol ListPresenterType where View.PDO.SW == Dispatcher.SW {
    associatedtype Dispatcher: ListDispatcherType
    associatedtype View: ListViewType

    init(dispatcher: Dispatcher, state: @escaping (_ state: AppState)->(ListState<Dispatcher.SW>))

    func attachView(_ view: View)
    ...
}
AbstractListViewController
中:

presenter = Presenter(dispatcher: dispatcher, view: self, state: state)
还有这个臭名昭著的错误:

Non-nominal type 'Presenter' does not support explicit initialization
以下是相关游乐场的注册人员:

  • 成功初始化(尽管无法调用
    附件视图(:)
  • 初始化失败,出现上述错误:
  • 请注意,每个空协议实际上都是一个通用协议,我刚刚删除了不必要的细节


    我想了解:

  • 是什么让一个“标称”类型突然“非标称”(没什么好奇怪的,它是一个符合通用协议的通用参数,但我不理解其原因)
  • 我听说了一些关于类型擦除的事情,但不太明白它是否适用于这里

  • 谢谢。

    因此,在Xcode9(beta 6)中,像
    非标称类型“%type”这样的错误不支持显式初始化
    仅仅等于缺陷较少的Xcode中的
    不匹配类型
    错误(如果是这样的话):
    无法使用类型为“…”的参数列表调用类型“%type”的初始值设定项,应使用类型为“…”的参数列表。

    您是否可以显示足够的实际详细信息以允许其他人复制?好主意,但由于所有对象都是泛型的,并且取决于其他对象的类型,因此可能需要大量代码,或者仍然没有足够的细节。我将尝试创建一个游乐场。UPD:我已经添加了GIST,具有最小的可复制代码。Swift版本重要吗?在您的“Init failing with the referenced error”中,我得到的是
    无法使用类型为的参数列表调用类型为“Presenter”的初始值设定项。。。需要类型为“(dispatcher:Self.dispatcher,view:Self.view)”的参数列表,
    无法使用类型为的参数列表调用“attachView”。。。需要类型为“(Presenter.View)”的参数列表
    我使用swift 3,但使用xcode 9 beta 6编译。这整件事在xcode 8中根本不起作用,对操场一无所知。我会查的谢谢你这浪费了我一天的一个小时
    presenter = Presenter(dispatcher: dispatcher, view: self, state: state)
    
    Non-nominal type 'Presenter' does not support explicit initialization