> On Sep 15, 2017, at 4:26 PM, Slava Pestov <spes...@apple.com> wrote: > > >> On Sep 15, 2017, at 12:40 PM, Joanna Carter via swift-users >> <swift-users@swift.org> wrote: >> >> Xcode Version 9.0 (9A235) >> >> Hmmm. I'm now getting a segmentation fault : 11 on a constructor when trying >> to implement type erasure : > > Swift 4.0 had issues with members and member references named ‘subscript’. On > master, I get the correct error message without crashing: > > Slavas-MBP:swift slava$ > ../build/Ninja-ReleaseAssert/swift-macosx-x86_64/bin/swiftc sub.swift > sub.swift:22:17: error: value of type 'providerType' has no member 'subscript' > _subscript = base.subscript > ^~~~ ~~~~~~~~~ > > Indeed you’re not supposed to be able to refer to a subscript member like > this. You could use a keypath, or try some other approach.
You could also write an explicit closure that loads the subscript: let fn = { base[$0] } Slava > > Slava > >> >> protocol DataProvider >> { >> associatedtype ItemType >> >> subscript(index: Int) -> ItemType { get } >> } >> >> class _AnyDataProviderBoxBase<itemType>: DataProvider >> { >> subscript(index: Int) -> itemType >> { >> fatalError() >> } >> } >> >> class _AnyDataProviderBox<providerType: DataProvider>: >> _AnyDataProviderBoxBase<providerType.ItemType> >> { >> private let _subscript: (_ index: Int) -> providerType.ItemType >> >> init(_ base: providerType) // segmentation fault : 11 >> { >> _subscript = base.subscript >> } >> >> override subscript(index: Int) -> providerType.ItemType >> { >> return _subscript(index) >> } >> } >> >> final class AnyDataProvider<providerType : DataProvider>: DataProvider >> { >> private let box: _AnyDataProviderBox<providerType> >> >> init(_ base: providerType) >> { >> self.box = _AnyDataProviderBox(base) >> } >> >> subscript(index: Int) -> providerType.ItemType >> { >> return box[index] >> } >> } >> >> Joanna >> >> -- >> Joanna Carter >> Carter Consulting >> >> _______________________________________________ >> swift-users mailing list >> swift-users@swift.org >> https://lists.swift.org/mailman/listinfo/swift-users > _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users