swift - 通用类中的 "segmentation fault : 11"

标签 swift generics segmentation-fault swift4

我正在尝试在 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。

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

最佳答案

是的!

问题是您无法将下标“方法”分配给闭包引用。

为了实现这一点,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] }
  }
}

关于swift - 通用类中的 "segmentation fault : 11",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46242847/

相关文章:

ios - 从选项卡切换时的透明 View

ios - var 和 let 定义改变了 swift 和 swift2。 swift 2 中的 var 定义是否发生了变化?

c# - 将 DataGridView 绑定(bind)到 List<T> 不显示数据

C# Return Generic List/IEnumerable,它是如何工作的?

c - 为什么我在第二次搜索文件时收到段错误错误?

swift - 升级 MacOs 和 Xcode 时 Carthage 更新失败,退出代码为 1

c# - 基于泛型约束的方法重载?

c - 从文件读取时我的 C 程序出现段错误

C 创建一个字符串结构

ios - 按下完成按钮时如何添加标记?