У меня есть NSFetchedResultsController
расширение:
extension NSFetchedResultsController
{
func tryObjectAtIndex(_ indexPath: IndexPath) throws -> AnyObject // ERROR HERE
{
do
{
try ObjC.catchException
{
return self.object(at: indexPath) // CAUSE
}
}
catch
{
print("An error ocurred: \(error)")
}
}
}
, в котором ObjC
является классом Objective-C (от здесь ). Вот это .h
:
#import <Foundation/Foundation.h>
@interface ObjC : NSObject
+ (BOOL)catchException:(void(^)())tryBlock error:(__autoreleasing NSError **)error;
@end
И .m
:
@implementation ObjC
+ (BOOL)catchException:(void(^)())tryBlock error:(__autoreleasing NSError **)error
{
@try
{
tryBlock();
return YES;
}
@catch (NSException *exception)
{
*error = [[NSError alloc] initWithDomain:exception.name code:0 userInfo:exception.userInfo];
return NO;
}
}
@end
При tryObjectAtIndex
появляется ошибка Extension of a generic Objective-C class cannot access the class's generic parameters at runtime
.
Единственный ответ на связанный вопрос 'Как написать расширение для NSFetchedResultsController в Swift 4' предлагает добавить @objc
перед функцией. Но в приведенном выше коде это не имеет никакого значения.
Вызов self.object(at:)
вызывает эту проблему. Но на самом деле, без обработки исключений Objective-C, так что просто return self.object(at: indexPath)
в качестве тела функции ошибка не возникает.
Как мне решить эту проблему?
ВАЖНО: Я нахожусь на Xcode 8.3.2 и не могу сейчас обновить (так как это устаревший проект).