Swift 关联类型符合协议时的SEGFULT

Swift 关联类型符合协议时的SEGFULT,swift,protocols,associated-types,Swift,Protocols,Associated Types,我在尝试编译下面的代码时遇到了Swift编译器分段错误的问题 我已经发布了关于此问题的错误报告,但不知道是否: 1.我做了任何天生的错事 2我可以使用“变通方法”来实现类似的结果。我想不会,但如果你有任何想法,我将不胜感激 class Foo<T, U: AnyObject> { } protocol Bar { typealias T: AnyObject // <- that appears to be the problem func foo() ->

我在尝试编译下面的代码时遇到了Swift编译器分段错误的问题

我已经发布了关于此问题的错误报告,但不知道是否: 1.我做了任何天生的错事 2我可以使用“变通方法”来实现类似的结果。我想不会,但如果你有任何想法,我将不胜感激

class Foo<T, U: AnyObject> {

}

protocol Bar {
  typealias T: AnyObject // <- that appears to be the problem
  func foo() -> Foo<Self, T>
}

extension String: Bar {
  func foo() -> Foo<String, NSString> {
    return Foo<String, NSString>()
  }
}

我还没有找到解决方案,但我已经做了一些进一步的测试。如果相关的类型来自基础或UIKIT,编译器的分段似乎是这样。它编译时关联的类型是我们自己的Swift或Objective-C类。如果它是来自SceneKit或CoreData的类,它也会编译。您可能希望自己检查并更新您的bug报告。如果关联的类型始终是Cocoa类,则解决方法可能是使用“typealias T:NSObject”。@IvicaM。伟大的洞察力!谢谢你的解决办法。到目前为止,它似乎做到了这一点!T:NSObject和T:AnyObject之间有什么关键区别吗?AnyObject允许普通swift类,而NSObject不允许,对吗?顺便说一句,请随意将此作为答案发布,我会接受: