0

我正在使用 FXForm 库,并希望在 Objective C 文件函数中从我的 Swift 文件中获取数据。

演示项目 链接

Swift 代码实现:

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
4

2 回答 2

3

要在 Objective-C 文件中使用 Swift 类,您需要在 Objective-C 文件中导入Xcode 生成的头文件。

#import "ProductModuleName-Swift.h"

我创建了一个同名的测试项目。

Swift 文件: // // FXFormVariables.swift // 测试 // // 由 Puneet Sharma2 于 2017 年 7 月 12 日创建。// 版权所有 © 2017 com.puneet.sh2525。版权所有。//

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 }
}

Objective-C 文件

#import "ABC.h"
#import "Test-Swift.h"

@implementation ABC


- (void)drawRect:(CGRect)rect {
    NSArray *hideArray = [FXFormVariables FXHiddenCell];
}

你可以在这里阅读更多关于它的信息。

于 2017-07-12T09:11:20.597 回答
0

从字面上看,我花了几个小时试图弄清楚为什么我导入到我的 Objc 代码库中的一个 swift 文件会发生这种情况,真正的原因是由于使用了嵌套类。

如:

@objc public class MyClass {
 @objc public class SecondClass {}
}

如果我尝试在我的 Objective-C 代码中使用 SecondClass,我会遇到 Apple Mach O-Link 死亡错误。因此,解决方案是取消嵌套您要使用的类。

@objc public class MyClass {}
@objc public class SecondClass {}
于 2017-09-29T16:08:48.940 回答