Swift 3 在 Objective C 的扩展中使用 class 时出现链接器问题
Swift 3 Linker issue when using a class in an extension for Objective C
我正在尝试将 Swift 代码用于我的 Objective-C。在我更新到 Swift3、XCode 8.
之前,一切都很好用
与以下 Swift 类:
@objc (TRIABC1)
public class ABC : NSObject {
}
public class DTO: NSObject {
}
extension DTO {
@objc (TRIABC2)
public class ABC2 : NSObject {
}
}
然后在我的 Objective-C:
#import "MyApp-Swift.h"
- (void)abc {
TRIABC1 *a = [[TRIABC1 alloc] init];
TRIABC2 *b = [[TRIABC2 alloc] init];
}
TRIABC2 中的代码将在链接器阶段失败并出现以下错误:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_TRIABC2", referenced from:
objc-class-ref in TRMyFile.o
这显然只是一个简单的例子。我所有的代码都是 "extension" 格式。有没有办法通过删除扩展来解决这个链接器问题,而无需重写整个代码?
不幸的是,在这个问题上搜索了很多之后,结果是 Swift 3 错误。
我正在尝试将 Swift 代码用于我的 Objective-C。在我更新到 Swift3、XCode 8.
之前,一切都很好用与以下 Swift 类:
@objc (TRIABC1)
public class ABC : NSObject {
}
public class DTO: NSObject {
}
extension DTO {
@objc (TRIABC2)
public class ABC2 : NSObject {
}
}
然后在我的 Objective-C:
#import "MyApp-Swift.h"
- (void)abc {
TRIABC1 *a = [[TRIABC1 alloc] init];
TRIABC2 *b = [[TRIABC2 alloc] init];
}
TRIABC2 中的代码将在链接器阶段失败并出现以下错误:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_TRIABC2", referenced from:
objc-class-ref in TRMyFile.o
这显然只是一个简单的例子。我所有的代码都是 "extension" 格式。有没有办法通过删除扩展来解决这个链接器问题,而无需重写整个代码?
不幸的是,在这个问题上搜索了很多之后,结果是 Swift 3 错误。