我可以在静态库中扩展 NSString class 并在带有 Swift 的 App 中使用它吗?
Could I extend NSString class in Static Library and use it in App with Swift?
我在自定义静态库 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 包含一些 Swift 代码文件,所以我在 CommonLib 项目中创建了一个桥接头文件 CommonLib-Bridging-Header.h:
//in CommonLib-Bridging-Header.h
#import "NSString+ext.h"
接下来,我link CommonLib到我的App项目中,并在App项目中创建一个新文件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!!!
}
此时编译就OK了!!!但是当我 运行 应用程序崩溃时:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Swift._NSContiguousString isContainsEmoji]: unrecognized selector sent to instance 0x60400084b340'
所以这里有什么问题吗???以及如何解决???谢谢 ;)
(PS:我的环境Xcode9.3.1swift4.1)
终于,我很高兴修正了这个问题 ;)
很简单,给App项目添加link选项:
-all_load
没关系,你可以参考这个:
unrecognized selector sent to instance” to a static library despite ObjC flag
谢谢大家 ;)
我在自定义静态库 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 包含一些 Swift 代码文件,所以我在 CommonLib 项目中创建了一个桥接头文件 CommonLib-Bridging-Header.h:
//in CommonLib-Bridging-Header.h
#import "NSString+ext.h"
接下来,我link CommonLib到我的App项目中,并在App项目中创建一个新文件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!!!
}
此时编译就OK了!!!但是当我 运行 应用程序崩溃时:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Swift._NSContiguousString isContainsEmoji]: unrecognized selector sent to instance 0x60400084b340'
所以这里有什么问题吗???以及如何解决???谢谢 ;)
(PS:我的环境Xcode9.3.1swift4.1)
终于,我很高兴修正了这个问题 ;)
很简单,给App项目添加link选项:
-all_load
没关系,你可以参考这个:
unrecognized selector sent to instance” to a static library despite ObjC flag
谢谢大家 ;)