将数据从Swift传递到Objective C时出现链接器错误

时间:2017-07-12 08:26:12

标签: ios swift xcode8 ios10.3 fxforms

我正在使用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

2 个答案:

答案 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 {}