2017-09-18 3 views
0

In Swift 3.2 diese (let id = row.tableViewCellClass?.reuseIdentifier) gearbeitet:Zugriff auf Klassen var auf AnyClass Variable in Swift 4

class DrillDownTableViewCell { 
    class var reuseIdentifier: String 
    { 
     return String(describing: self) 
    } 
} 

class RowViewModel: NSObject 
{ 
    var tableViewCellClass: AnyClass? 
} 

class Foo { 
    var row : RowViewModel? 
    func setup() { 
     row = RowViewModel() 
     row?.Class = DrillDownTableViewCell.self 
    } 

    func doThings() { 
     let id = row?.tableViewCellClass?.reuseIdentifier 
    } 
} 

Nach meinem Swift 4 Update, es zeigt „Instance Mitglied 'reuseIdentifier' nicht auf Typ 'ANYOBJECT' verwendet werden können,

.

Wie würde ich eine Klassenvariable auf eine Klasse zugegriffen werden, die Metatyp Informationen ist in einer AnyClass Variable gespeichert?

Antwort

0

(ich nehme an, Sie bedeuten eine ? nach row in doThings() haben. ich gehe davon aus th Es ist ein Tippfehler und kein Teil der Frage. Es gibt mehrere andere ? fehlt hier und einige andere Fehler, die ich nicht in tauchen.)

Wenn Sie tableViewCellClass erwarten eine reuseIdentifier Klasse Eigenschaft haben, dann ist es nicht vom Typ AnyClass. Es gibt viele Klassen, die diese Eigenschaft nicht haben. Sie möchten Klassen, die einem Protokoll entsprechen:

protocol Identifiying { 
    static var reuseIdentifier: String { get } 
} 

So Ihr Modell eine Identifying Klasse erfordert:

class RowViewModel: NSObject { 
    var tableViewCellClass: Identifiying.Type? 
} 

Dann können Sie diese verwenden, wie Sie erwarten.