在Swift子类中更改Objective C方法的实现

时间:2019-02-21 14:35:27

标签: objective-c swift

我在项目中使用外部库。它通过CocoaPods集成。我可以访问源代码。该库运行良好,但是我需要在某些地方进行一些修改才能使其达到我的目的。它是用Objective C编写的。我的项目是使用Swift。 我需要更改库中一种方法的实现。问题在于它在.m文件中,并且使用仅在.m文件中声明的许多内容。例如:

-(NSString*)methodToChange
{
    NSArray<NSNumber*>* data = [self someInternalMethod:1];
    uint value = data[0].unsignedIntValue;
    return [self anotherInternalMethod:value];
}

我试图像这样子化它:

class MySubclass : MySuperclassWithMethodToChange {
    override var methodToChange: String {
        //trying to use someInternalMethod and anotherInternalMethod
        //unsuccessfully because they are not visible 
    }
}

内部方法正在使用和修改.m文件中的属性,这些属性也无法访问。有什么办法解决这个问题?

1 个答案:

答案 0 :(得分:2)

我建议分叉原始库存储库,并在fork中进行必要的更改。然后,您可以将Podfile指向该位置。如果您所做的更改对其他人有用,请以不破坏现有功能的方式进行更改,并通过打开拉取请求将其重新添加到库中。

如果以后要更新原始库,则必须将这些更改从所谓的“上游”存储库合并到您的库中。这不会自动发生,因此您将对该流程拥有完全控制(和责任)。请参阅https://help.github.com/en/articles/syncing-a-fork了解其外观。