Ich habe mehrere rasche Klassen, wie ähnlich aussehen wie folgtSo extrahieren Sie optionale typisierte Werte von "Spiegeln" in Swift?
public class Book {
var title: String?
var date: NSDate?
}
Da es mehrere verschiedene Klassen, wo ich die Eigenschaften zugreifen müssen, ich Reflexion bin mit durch die Eigenschaften der Klasse auszuführen:
let myBook = Book()
myBook.title = "Hello"
myBook.date = NSDate()
let mirror = Mirror(reflecting: myBook)
var propsArr = [(key: String?, value: Any)]()
let mirrorChildrenCollection = AnyRandomAccessCollection(mirror.children)!
if mirrorChildrenCollection.count > 0 {
propsArr += mirrorChildrenCollection
}
//iterate through properties
for case let (label?, value) in propsArr {
print (label, value)
if let val = value as? NSDate {
var extractedDate = val
print(extractedDate)
}
else if let val = value as? String {
var extractedTitle = val
print (extractedTitle)
}
}
Aber ich habe ein Problem, dass die Child-Objekte nicht extrahiert werden, da sie von Typ Any und intern optional Klassen sind und daher nicht in meine Fälle fallen. Wenn ich den Titel von String ändere? zu String, sie funktionieren, aber ich muss optionale Typen verwenden.
Was kann ich in der obigen Implementierung ändern, um den Datentyp als String zu belassen? und Datum? und noch die Werte aus dem Spiegel extrahieren?