2016-07-11 10 views
0

Ich bekomme einen Segmentierungsfehler, wenn ich versuche, den untenstehenden Code zu kompilieren. Ich versuche, eine Typ-Constrained-Erweiterung für die Struktur CellUpdater zu machen, die auf eine Eigenschaft zugreift, deren Typ in einem zugeordneten Typ für einen generischen Typ definiert ist. Nicht sicher, ob ich etwas falsch mache oder ob es eine Einschränkung des Swift-Compilers ist, irgendwelche Ideen?Swift: using Instanz eines generischen Typs associatedtyp segfaults Compiler

+1

Obwohl dies in Xcode 7.3.1 tatsächlich segfault ist, kompiliert es in Xcode 8 Beta 2 :) – Hamish

Antwort

1

Ich denke, es könnte verbunden sein, dass der Compiler den View-Modelltyp zur Kompilierzeit, die in Swift erforderlich ist, nicht reparieren kann. Möglicherweise wurde es in Swift 3.0 behoben. Ich habe es geschafft, Ihren Code ein wenig zu ändern, so dass es jetzt kompiliert. Der Hauptunterschied bestand in dem Constraint-View-Modell anstelle der Zelle in der CellUpdater-Erweiterung.

struct CellUpdater<Cell where Cell: UpdatableView> : CellUpdaterType { 
    typealias ViewModel = Cell.ViewModel 

    let viewModel: ViewModel 
} 

extension CellUpdater where Cell.ViewModel : HeadlineCellViewModelType { 
    func generateDetailsDrillDownController(index: Int) -> UIViewController? { 
     let storyboard = UIStoryboard(name: "SomeStoryboard", bundle: nil) 
     let vc = storyboard.instantiateViewControllerWithIdentifier("SomeViewController") as? SomeViewController 
     vc?.headline = viewModel.headline 
     return vc 
    } 
} 

protocol HeadlineCellViewModelType { 
    var headline: Headline { get } 
} 

struct HeadlineCellViewModel : HeadlineCellViewModelType { 
    let headline: Headline 

    init(headline: Headline) { 
     self.headline = headline 
    } 
} 
Verwandte Themen