> 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

Reply via email to