У меня есть несколько быстрых классов, которые внешне похожи, как следующийКак извлечь необязательные типизированные значения из детей Mirror в Swift?
public class Book {
var title: String?
var date: NSDate?
}
Поскольку существует несколько различных классов, где мне нужно, чтобы получить доступ к свойствам, я использую отражение пробежать свойства класса:
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)
}
}
Но у меня есть проблема, что объекты Child не извлекаются, поскольку они относятся к типу Any и внутренне необязательным классам и, таким образом, не попадают в мои случаи. Если я изменю название из String? для String они работают, но мне нужно использовать необязательные типы.
Что я могу изменить в приведенной выше реализации, чтобы оставить тип данных как String? и дата? и все еще извлекать значения из зеркала?