[swift-users] Can't implement generic subscript in protocol
    Joanna Carter 
    joanna at carterconsulting.org.uk
       
    Fri Sep 15 05:13:09 CDT 2017
    
    
  
Xcode Version 9.0 (9A235)
Hmmm. I'm now getting a segmentation fault : 11 on a constructor when trying to implement type erasure :
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
    
    
More information about the swift-users
mailing list