通用 Objective-C 类的扩展无法在运行时访问该类的通用参数

mea*_*ers 5 exception nsfetchedresultscontroller ios swift swift4

我有以下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)")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

其中ObjC是一个 Objective-C 类(来自此处)。这是.h

#import <Foundation/Foundation.h>

@interface ObjC : NSObject

+ (BOOL)catchException:(void(^)())tryBlock error:(__autoreleasing NSError **)error;

@end
Run Code Online (Sandbox Code Playgroud)

还有.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
Run Code Online (Sandbox Code Playgroud)

tryObjectAtIndex出现错误时Extension of a generic Objective-C class cannot access the class's generic parameters at runtime

相关问题“How to write an extension for NSFetchedResultsController in Swift 4”的@objc唯一答案建议在函数前面添加。但在上面的代码中这没有任何区别。

打电话self.object(at:)会导致这个麻烦。但实际上,如果没有 Objective-C 的异常处理,那么就像return self.object(at: indexPath)函数体一样,错误不会发生。

我该如何解决这个问题?

重要提示:我使用的是 Xcode 8.3.2,目前无法更新(因为它是一个遗留项目)。