首页 文章

从Objective C类调用Swift函数

提问于
浏览
54

我有个问题 . 我有一个旧的Objective C项目,我想调用新的Swift函数和对象,我创建了文件“-Bridging-Header.h”和“-Swift.h”

我很容易将函数从Swift调用到Objective C,但我有一个反向问题 .

所以我创建了一个简单的类“System.Swift”

import Foundation

@objc class System : NSObject {

@objc func printSome() {
    println("Print line System");
    }
}

现在我试着按照文档here并在<...> - Swift.h文件中写了这个

@class System;

@interface System : NSObject

-(void)printSome;

@end

我已经在Objective C Class中导入了它 . 在我的Objective C Code的Objective C类(当前是UIViewController)中,我尝试调用“printSome”方法:

- (void)viewDidLoad
{
    [super viewDidLoad];
    System * sis = [[System alloc] init];
    [sis printSome];
    //any additional setup after loading the view from its nib.
}

现在我有以下错误:

架构i386的未定义符号:“_ OBJC_CLASS _ $ _ System”,引用自:“ObjectiveC_Class_That_Call_Swift_Object”中的objc-class-ref .o ld:找不到架构i386 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)

有人可以帮助我吗?

关心所有 .

5 回答

  • 36

    问题解决了,我之前在我的 Objective-C 类中创建并包含了一个名为 <ProductModuleName>-Swift.h 的新 .h 文件,但是,正如我后来发现的那样,此步骤不是必需的,因为编译器会创建必要的文件不可见 .

    只需在您的课程中包含 <ProductModuleName>-Swift.h 即可 .

  • 2

    对了谢谢

    这很奇怪,但它会起作用

    1) Add @objc  to  Swift class
    
    2) Add in .m 
        #import "(ProjectName)-Swift.h"
    
    3) Call from .h
        @class SwiftClass;
    
    4)On SwiftClass 
       click "Command" + Left Click (Apple Documantation)
    
    5) To see "-Swift.h" -> click "Command" + Left Click
    

    App将在-Swift.h中为此类生成接口

    示例:SWIFT_CLASS(“_ TtC10Project17220PLHelper”)@interface PLHelper

    • (void)notifyForDownloading:(NSDictionary *)userInfo;

    • (instancetype)init OBJC_DESIGNATED_INITIALIZER; @结束

  • 9

    假设我们有ProjectName“MyFirstProjectOnSwift”和swift类名“mySwiftClass”,而objectiveC类是“MyObjectiveCLass”

    以下步骤是: -

    在“MyObjectiveCLass.m”中添加#import“MyFirstProjectOnSwift-Swift.h”在MyObjectiveCLass.h中添加@class mySwiftClass;然后在MyObjectiveCLass.m中mySwiftClass * myClass = [mySwiftClass new]; {在任何想要调用swift方法的方法中调用Like This . } [myClass methodName];

  • 29

    检查-swift.h文件,该文件在objective-C中的.m文件中有导入:

    #import <YourProjectName-Swift.h>
    

    单击该行,然后单击鼠标左键 - 跳转到定义 .

    应自动包含此文件,而不是手动包含 .

  • 21

    如果您在导入 <ProductModuleName>-Swift.h 后仍然没有看到您的课程 .

    确保您的类是子类化本机类(例如 UIViewController ),或者至少如果它只是一个实用程序类,请将其作为子类 NSObject . 你的 class 现在应该展示 .

相关问题