> 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. 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