我正在使用FXForm库,并希望从Objective C文件函数中获取Swift文件中的数据。
演示计划 Link
Swift Code Implimnetation:
let fontName = "HelveticaNeue"
let fontSizeLarge:CGFloat = 14.0
var hiddenElementFromFormIndex = [Int]()
//fx form variables
@objc class FXFormVariables : NSObject {
public override init() {}
class func FXFontName() -> String { return fontName }
class func FXFontSize() -> CGFloat { return fontSizeLarge }
class func FXHiddenCell() -> NSArray { return hiddenElementFromFormIndex as NSArray }
}
在Objective C文件中,当我们在下面写道时出现错误:
NSArray *hideArray = [FXFormVariables FXHiddenCell];
我正确创建了桥头文件,并在Objective C文件中检查了Target Membership。
我收到错误:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$__TtCC13Social_Engine11AppDelegate15FXFormVariables", referenced from:
objc-class-ref in FXForms.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
架构和有效架构是:
armv7 and armv64
答案 0 :(得分:3)
要在Objective-C文件中使用Swift类,您需要在Objective-C文件中导入 Xcode生成的头文件。
import Foundation
import UIKit
let fontName = "HelveticaNeue"
let fontSizeLarge:CGFloat = 14.0
var hiddenElementFromFormIndex = [Int]()
//fx form variables
@objc class FXFormVariables : NSObject {
public override init() {}
class func FXFontName() -> String { return fontName }
class func FXFontSize() -> CGFloat { return fontSizeLarge }
class func FXHiddenCell() -> NSArray { return hiddenElementFromFormIndex as NSArray }
}
我创建了一个名称相同的测试项目。
Swift文件: // // FXFormVariables.swift //测试 // //由Puneet Sharma2于17/07/17创建。 //版权所有©2017 com.puneet.sh2525。版权所有。 //
#import "ABC.h"
#import "Test-Swift.h"
@implementation ABC
- (void)drawRect:(CGRect)rect {
NSArray *hideArray = [FXFormVariables FXHiddenCell];
}
Objective-C文件
First()
您可以详细了解here。
答案 1 :(得分:0)
从字面上看,我花了几个小时试图弄清楚为什么我的一个swift文件正在进行我的Objc代码库,而真正的原因是由于使用了嵌套类。
如:
@objc public class MyClass {
@objc public class SecondClass {}
}
如果我在我的Objective-c代码中尝试使用SecondClass,那么Apple Mach O-Link就会出现死亡错误。因此解决方案是对要使用的类进行反嵌。
@objc public class MyClass {}
@objc public class SecondClass {}