通用Objective-C类的扩展无法在运行时

时间:2018-04-24 15:39:40

标签: ios swift exception swift4 nsfetchedresultscontroller

我有以下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类(来自here)。这是.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

相关问题'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并且目前无法更新(因为它是遗留项目)。

0 个答案:

没有答案