swift2 如何访问objective-c文件中的swift类

q3aa0525  于 2022-11-23  发布在  Swift
关注(0)|答案(3)|浏览(394)

我有一个swift项目,我在项目中导入了一个singleton,objective-c编码的类。
我尝试导入productname_swift. h文件,但没有成功。
我怎样才能访问那个单例类中的swift类?

nsc4cvqm

nsc4cvqm1#

    • Swift制作的项目:在Objective C中使用Swift类**

要在Objective C中使用Swift类,请按照以下步骤操作:
1.创建一个名为User的目标C类。
1.弹出窗口显示"是否要配置Objective-C桥接头"。选择创建桥接头

    • 使用者. h**
#import <Foundation/Foundation.h>

@interface User : NSObject

+(id) sharedUser ;

@end
    • 使用者. m**
#import "User.h"
#import "SwiftInObjectiveC-swift.h"

@implementation User

//Singleton of User

+(id)sharedUser{

    static User *sharedUser = nil;
    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        sharedUser = [[self alloc] init];

        //Class Method of ViewController.swift
        [ViewController mySwiftClassFunction];

        //Instance Method of ViewController.swift
        ViewController *vc = [[ViewController alloc] init];
        [vc mySwiftFunction];

    });
    return sharedUser;
}

-(void) myObjcectivecMethod {

    ViewController *vc = [[ViewController alloc] init];
    [vc mySwiftFunction];

}

1.在. swift类中的类名前面添加@objc

import UIKit

 @objc class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func mySwiftFunction() {

    print("Swift Function")
}

class func mySwiftClassFunction (){

    print("Swift Class Function")

}

}

1.转到"生成设置"。
1.设置产品模块名称:项目名称

1.集合定义模块:是的

1.设置嵌入内容包含Swift:是的

1.设置安装Objective-C兼容性标头:是的


指令集
1.设置Objective-C桥接标头:SwiftInObjectiveC/SwiftInObjectiveC-Bridging-Header.h

1.将自动生成的标题"ProjectName-swift. h"导入到***. m**文件中。
1.清理并运行项目。
1.它会起作用的!
有关详细信息,请点击Apple的"混搭"链接。


指令集

yx2lnoni

yx2lnoni2#

在Objective-C中使用Swift类非常简单,只需按照以下步骤操作

  • 打开Objective-C项目。
  • 将新的swift文件添加到项目中。
  • 将打开一个默认对话框以创建桥接标题(如果它

默认情况下不打开,请添加桥接头文件)。

  • 转到构建设置类型Swift Compiler,您将在Swift Compiler- General中看到您的ProjectName-Swift.h,如下所示x1c 0d1x
  • 导入您所需的swift类构建并运行。
pbpqsu0x

pbpqsu0x3#

向Objective-C项目添加多个Swift文件。

假设您要将 Class1.swiftClass2.swiftClass3.swift 文件添加到 SwiftToObjC 项目中
1.将 Class1.swift 文件添加到项目中。


  1. XCode会询问“您要配置Objective-C桥接头吗?”您选择了“创建桥接头”。这样就生成了 SwiftToObjC-Bridging-Header.h 文件和 SwiftToObjC-Swift.h 文件。
    1.在SwiftToObjC-Bridging-Header.h文件中,添加以下行
    @类Class 1;
    1.当您将 Class2.swiftClass3.swift 添加到项目中时,也会将这两个类添加到 SwiftToObjC-Bridging-Header.h 文件中,如下所示。
    @类Class 1;
    @类Class 2;
    @类Class 3;
    5.在目标SwiftToObjC中,在 * 构建设置 Swift-Compiler General 下,您应该看到以下两个设置:

    Objective-C桥接标头-〉SwiftToObjC-Bridging-Header.h
    Objective-C生成的接口头文件名称-〉SwiftToObjC-Swift. h
    6.在目标SwiftToObjC中,
    构建设置 * 下的 * 定义模块 * 设置为YES。
    1.如果您想访问 MyViewController 中的Class 1,那么在 MyViewController.m 中,您应该导入。


import“快速到对象C桥接-标题.h”

1.在 Class1.swift 文件中,将类声明为“@objc public”,如下所示。相同的@objc public用于Class 2和Class 3。
@objc公共类Class 1:可用视图控制器
注意:UITableViewController仅为示例,用于演示目的。
就这样了

相关问题