Objective c 我可以在静态库中扩展NSString类,并在应用程序中与Swift一起使用它吗?

Objective c 我可以在静态库中扩展NSString类,并在应用程序中与Swift一起使用它吗?,objective-c,swift,static-libraries,objective-c-swift-bridge,class-extensions,Objective C,Swift,Static Libraries,Objective C Swift Bridge,Class Extensions,我在自定义静态库CommonLib中扩展NSString: //NSString+ext.h #import <Foundation/Foundation.h> @interface NSString (ext) - (BOOL)isContainsEmoji; @end //NSString+ext.m #import "NSString+ext.h" @implementation NSString (ext) - (BOOL)isContainsEmoji{

我在自定义静态库CommonLib中扩展NSString:

//NSString+ext.h
#import <Foundation/Foundation.h>

@interface NSString (ext)
- (BOOL)isContainsEmoji;
@end



//NSString+ext.m
#import "NSString+ext.h"

@implementation NSString (ext)
- (BOOL)isContainsEmoji{
    //Do Something...
}
@end
接下来,我将CommonLib链接到我的应用程序项目,并在应用程序项目中创建一个新文件Node.swift:

//Node.swift
import Foundation
import CommonLib

class Node{

    var name:String!
    var isBadName:Bool{
        let tmpString = name as NSString
        return tmpString.isContainsEmoji()
    }
}
最后,我在我的应用程序中使用它:

//In my UIViewController class
override func viewDidAppear(...){
    super.viewDidAppear(...)

    let node = Node()
    node.name = "panda hopy"
    print("\(node.isBadName)") //Crash in this line!!!
}
此时编译就可以了!!!但当我运行应用程序时,它崩溃了:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[Swift.\n连续字符串IsContainesMoji]:未识别的选择器发送到实例0x60400084b340'

那么这里有什么问题吗???如何修复它???谢谢;)


(注:我的环境Xcode 9.3.1 swift 4.1)

最后,我很高兴修复了这个问题;)

非常简单,将链接选项添加到应用程序项目:

-全负荷

没关系,你可以参考这个:


谢谢大家;)

库中不能有桥接头,这意味着您可以使用Objective-C中的swift,但不能使用其他方法。您的意思是删除桥接头文件,它将起作用???更重要的是,您可以有桥接头,它只是在静态或动态库中被忽略。混合Objective-C和Swift不支持库和框架。苹果的一位开发人员直接告诉了我这一点。谢谢,但是如何修复呢???你可以为你的swift和objective-c组件使用单独的框架。或者你可以让Objective-C只调用swift,而不调用swift。您可以通过使用动态实例化和swift中定义的协议来解决这个问题。。。但要警惕出现的裁判计数问题。
//In my UIViewController class
override func viewDidAppear(...){
    super.viewDidAppear(...)

    let node = Node()
    node.name = "panda hopy"
    print("\(node.isBadName)") //Crash in this line!!!
}