Вы указываете объекты как типы, а не как объекты.
Пример:
let a = b as! [String]
, а не :
let a = [String]()
let c = b as! a
Решение № 1:
Измените NSFetchRequest<NSFetchRequestResult>
, чтобы указать явно тип InternalOrganizationMO
, например:
NSFetchRequestResult<InternalOrganizationMO>
Этот fetchRequest
теперь имеет соответствующий связанный тип InternalOrganizationMO
и будет использоваться соответственно для возврата объектов этого типа.
После этого вам не нужно будет повторно вводить result
, и следующий код должен работать нормально:
func fetchOrg() {
let fetchRequest = NSFetchRequest<InternalOrganizationMO>(entityName: "InternalOrganization")
do {
let internalOrganization = try managedContext.fetch(fetchRequest)
/*
internalOrganization will be of type [InternalOrganizationMO]
as that is the return type of the fetch now.
*/
//handle internalOrganization here (within the do block)
print(internalOrganization.count)
}
catch {
fatalError("Failed to fetch internal organization \(error)")
}
}
Решение # 2:
Если вы хотите, чтобы этот метод работал, даже если попытка fetchRequest
или приведение типов не удалась, вы можете сделать это:
func fetchOrg() {
var internalOrganization = [InternalOrganizationMO]()
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "InternalOrganization")
do {
internalOrganization = try managedContext.fetch(fetchRequest) as? [InternalOrganizationMO]
/*
You ofcourse wouldn't want the above optional binding to fail but even if it
does, atleast your method can stay consistent and continue with an empty array
*/
}
catch {
fatalError("Failed to fetch internal organization \(error)")
}
//handle internalOrganization here
print(internalOrganization.count)
}
Выбор решения,зависит от вашего дизайна и требований.