泛型类中的"segmentation fault : 11"



我正在尝试在swift 4中创建一个简单的类型擦除结构:

protocol DataProvider
{
  associatedtype ItemType
  subscript(index: Int) -> ItemType { get }
}
struct AnyDataProvider<providerType: DataProvider> : DataProvider
{
  private var _subscript: (_ index: Int) -> providerType.ItemType
  init<P : DataProvider>(_ base: P) where P.ItemType == providerType.ItemType
  {
    _subscript = base.subscript
  }
  subscript(index: Int) -> providerType.ItemType
  {
    return _subscript(index)
  }
}

,但我得到了一个分段错误:在声明初始评估器的行上有11个。

有什么想法,除了将其报告为错误吗?

yesss!

问题是您无法将下标"方法"分配给关闭参考。

为了实现这一目标,Apple的Slava Pestov向我展示了分配匿名闭合的技巧,该封闭称为下标。

这是完成的代码:

protocol DataProvider
{
  associatedtype ItemType
  subscript(index: Int) -> ItemType { get }
}
struct AnyDataProvider<itemType> : DataProvider
{
  private let _subscript: (Int) -> itemType
  subscript(index: Int) -> itemType
  {
    return _subscript(index)
  }
  init<providerType : DataProvider>(_ base: providerType) where providerType.ItemType == itemType
  {
    _subscript = { base[$0] }
  }
}

相关内容

  • 没有找到相关文章

最新更新