Swift与Objective-C混合编程

参考资料
- 从Objective-C到Swift
- swift与objective-c混编
- Swift and Objective-C in the Same Project

Swift 与 Objective-C混合调用示意图

Swift类引用Objective-C文件

因为Swift没有内嵌的头文件机制,因此Swift调用Objective-C需要一个名为“<工程名>-Bridging-Header.h”的桥接头文件。桥接头文件的作用是为Swift调用Objective-C对象搭建一个桥,它的命名必须是“<工程名>- Bridging-Header.h”,我们需要在桥接头文件中引入Objective-C头文件,所有的Swift类会自动引用这个头文件。
桥接文件
桥接文件设置

  • OJC类如下:
//
//  ObjcFunc.h
//  CombinedProgram
//
//  Created by apple on 15/7/1.
//  Copyright (c) 2015年 hoteam. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface ObjcFunc : NSObject

-(NSString*)sayHello:(NSString*)greeting withName: (NSString*)name;

@end
//
//  ObjcFunc.m
//  CombinedProgram
//
//  Created by apple on 15/7/1.
//  Copyright (c) 2015年 hoteam. All rights reserved.
//

#import "ObjcFunc.h"
#import "CombinedProgram-Swift.h"

@implementation ObjcFunc

- (NSString*)sayHello:(NSString*)greeting withName: (NSString*)name{

    NSString *string = [NSString stringWithFormat:@"Hi,%@ %@.",name,greeting];
    return string;
}

@end
  • Swift类中调用
import Foundation

@objc class SwiftFunc: NSObject {

    func sayHello() -> Void {

    var obj : ObjcFunc = ObjcFunc()

    println(obj.sayHello("Hello", withName: "Swift"));

        return
    }
}

Objective-C类引用Swift文件

(1)在Building Settings -> Packaging -> Defining中选定Module Name;
(2)在OJC的头文件中引入:#import "{ModuleName}-swift.h"

    SwiftFunc* obj = [[SwiftFunc alloc] init];
    [obj sayHello];

有时候会发现Xcode无法自动生成*-Swift.h文件,可以参考StackOverflow上的这篇文章。该文章总结下来,我们需要进行以下两大步检测:
(1)检测你的Xcode的配置

Product Module Name : myproject
Defines Module : YES
Embedded Content Contains Swift : YES
Install Objective-C Compatibility Header : YES
sObjective-C Bridging Header : $(SRCROOT)/Sources/SwiftBridging.h

(2)检查你的Swift类是否正规
要保证你的Swfit类中已经使用@objc关键字声明了一个继承自NSObject的类。Xcode不会为存在任何编译错误的类进行编译操作。
(3)忽略Xcode的报错,先编译一下

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值