gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:09:36 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com