Swift: 'Abort trap: 6 - pointer being freed was not allocated' 带有类 where 子句

标签 swift swift2

考虑以下因素:

protocol DataContainer {
  typealias Data
}

protocol Foo {
  typealias FooBar: DataContainer
  typealias FooBaz: DataContainer
  typealias Schema
}

final class FooClass<F: Foo where F.Schema == F.FooBar.Data, F.Schema == F.FooBaz.Data> {}

这个相当富有表现力 where 子句编译时不会出现神秘的错误消息:

Command failed due to signal: Abort trap 6
...
swift(4946,0x7fff777c9300) malloc: *** error for object 0x7fff5a5fbfe0: pointer being freed was not allocated

这对我来说完全没有意义。我已经确认,当我删除 where 子句约束时,错误就会消失,如下所示:

final class FooClass<F: Foo> {}

我知道这是在黑暗中进行的一次漫长的尝试,但是有人经历过吗?

如果是这样,您找到了解决方法吗?

<小时/>

附录:如果 swift 允许在协议(protocol)本身内部表达等式约束,而不是将约束泄漏到其实现者中,那么这种情况本来可以完全避免。引用this question .

最佳答案

好的。因此,经过几次强力调试后,我发现如果我对约束参数使用相同的 type 名称,它确实可以编译。

例如,

protocol Foo {
  typealias FooBar
  typealias FooBaz
  typealias Data
}
final class FooClass<F: Foo where F.Data == F.FooBar.Data, F.Data == F.FooBaz.Data> {}

编译。请注意,我所做的只是将 Schema 更改为 Data。这绝对是一个错误。

-编辑:并进行相应报告。

关于Swift: 'Abort trap: 6 - pointer being freed was not allocated' 带有类 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34036240/

相关文章:

ios - Swift 网络调用 : Latency keeps increasing and finally request timeout

ios - 具有自动更新当前时区的静态让日历不起作用

ios - 在注册 Parse 后端(Swift)获取 Facebook 个人资料图片

swift - 如何在 NavigationBar 上动态添加按钮(在运行时)? - swift 2.0

ios - 每次我尝试在调试器控制台中打印内容时,Xcode 7 都会崩溃

swift - 有什么理由不在 Swift 中使用单例 "variable"?

swift - 如何在没有当前 Controller 的情况下调用委托(delegate)函数

ios - AppDelegate访问ViewController

equality - Swift 2.0 中等于运算符和 NSObjects 的错误?

ios - 用户点击 "don' t 允许后显示 UILocalNotification 请求”