我有一个奇怪的问题:
我有一个名为CustomItemTemplate
的{{1}}。它具有许多子托管对象,例如SpecialItemTemplate
或viewController
。
现在我有一个列表ItemTemplate
,该列表应该显示这些子托管对象。例如,仅“ CustomItemTemplaze”或仅“ SpecialItemTemplate”。我编写了这种通用方法来获取所有private func loadTemplates<T: ItemTemplate>(ofType type: T.Type) -> [ModelObject] {
// ModelObject is just a model for my managed objects
var templates = [ModelObject]()
do {
let request: NSFetchRequest<ItemTemplate> = ItemTemplate.fetchRequest()
let result = try mainViewContext.fetch(request)
for item in result {
if item is T { // this is somehow always true
templates.append(item.modelObject) // add the converted item to the array
}
}
} catch let error as NSError {
print("Error: ", error.debugDescription)
}
return templates
}
并过滤出所需的子对象(我还没有找到更好的方法)。
enum Category {
case custom
case special
public var templateClass: ItemTemplate.Type {
switch self {
case .custom:
return CustomItemTemplate.self
case .special:
return SpecialItemTemplate.self
}
}
}
loadTemplates(ofType: currentCategory.templateClass)
我这样称呼它:
if item is T
但是,它没有过滤。 ItemTemplate
对于每一项似乎都是正确的。因此,它将返回每个Replace
,而不是仅返回某些子对象。
那是为什么?我无法解释。
感谢您的帮助!