我有一个通过cocoapods管理的swift框架,它包含这样一个扩展:

public extension UIImage {
    public static func maskedImageWithColor( color: UIColor, forImageNamed image: UIImage) {
        // Implementation
    }
}

当我在我的主应用程序中用目标C编写它时,我不会得到任何编译器错误或警告。
// No problems here!
[UIImage maskedImageWithColor:UIColor.blackColor() forImageNamed:@"myImage"];

然而,当我运行这个应用程序时,它会爆发出一堆“无法识别的选择器”错误。
奇怪的是,当框架包含在项目中并直接添加到构建阶段的相关部分(即不由cocoapods管理)时,它都会按预期工作。
框架类、枚举等的其他方面也都很好地工作,只是看起来像是扩展,而且只有当它们位于由cocoapods管理的框架中时。
有什么我可能会错过这里的想法吗?

最佳答案

这是因为链接器默认情况下不会从静态库加载类别方法。如果要使用静态库添加类别方法(swift中的扩展),请将-ObjC添加到目标生成设置中的其他链接器标志。
阅读更多here

关于objective-c - Cocoapods框架中的Swift扩展导致无法识别的Selector发送到Class,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33511804/

10-17 02:37