Objective-C和Swift的交互操作

伴随着WWDC2014,令无数的开发者又开始忙碌起来,不管Swift的评价到底怎么样,总是令人兴奋的,今天,我们就来讨论一下Objective-C和Swift的互相调用。

Swift调用OC

1.添加一个OC的.h头文件和.m实现体

添加一个OC源程序文件到我们的工程中,取名为Util.h和Util.m

2.添加链接的头文件

当我们添加.m文件的时候,Xcode会弹出一个对话框,要我们配置链接的头文件,点击YES:

如果你并没有看到这个对话框或者不小心删除了这个链接文件,你可以自己添加一个.h文件,命名为<#YourProjectName>-Bridging-Header.h

3.构建刚刚创建的OC类

Util.h
1
2
3
4
5
6
7
8
9
#import <Foundation/Foundation.h>

@interface Util : NSObject

@property (strong, nonatomic) id someProperty;

- (void)someMethod;

@end
Util.m
1
2
3
4
5
6
7
8
9
#import "Util.h"

@implementation Util : NSObject

- (void)someMethod {
NSLog(@"SomeMethod Ran");
}

@end

4.添加类到链接头文件中

在YourProject-Bridging-Header.h文件中添加:

1
#import "Util.h"
5.在Swift中使用Util类
SomeSwiftFile.swift
1
2
3
4
var instanceOfUtilObject: Util = Util()
instanceOfUtilObject.someProperty = "Hello World"
println(instanceOfUtilObject.someProperty)
instanceOfUtilObject.someMethod()

并不需要额外的添加import操作,链接头文件已经为我们准备好了一切关联。

OC调用Swift

1.创建一个新的Swift类

添加一个新的Swift类,名位SwiftObject.swift

SwiftObject.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import Foundation

class SwiftObject : NSObject {

var someProperty: AnyObject = "Some Initializer Val"

init(){}

func someFunction(someArg: AnyObject) -> String {
var returnVal = "You sent me \(someArg)"
return returnVal
}

}

2.在OC类中import Swift类

在需要使用Swift类的OC实现体文件中导入swift类:

1
#import "<#YourProjectName#>-Swift.h"

<#YourProjectName#>-Swift.h这个文件已经被自动创建了,即使你不能够看到它。

3.在OC中调用Swift

1
2
3
4
5
6
SwiftObject *ob = [SwiftObject new];
NSLog(@"ob.someProperty: %@", ob.someProperty);
ob.someProperty = @"Hello World";
NSLog(@"ob.someProperty: %@", ob.someProperty);
NSString *retString = [ob someFunction:@"Arg"];
NSLog(@"RetString: %@", retString);

Swift单例的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class UtilSingleton: NSObject {

var iVal: Int = 0

class var shareInstance: UtilSingleton {
get {
struct Static {
static var instance: UtilSingleton? = nil
static var token: dispatch_once_t = 0
}
dispatch_once(&Static.token, {
Static.instance = UtilSingleton()
})
return Static.instance!
}
}

}

如何使用:

1
2
UtilSingleton.shareInstance.iVal++
println("singleton new iVal = \(UtilSingleton.shareInstance.iVal)")
文章目录
  1. 1. Swift调用OC
    1. 1.0.1. 1.添加一个OC的.h头文件和.m实现体
    2. 1.0.2. 2.添加链接的头文件
    3. 1.0.3. 3.构建刚刚创建的OC类
    4. 1.0.4. 4.添加类到链接头文件中
      1. 1.0.4.1. 5.在Swift中使用Util类
  • 2. OC调用Swift
    1. 2.0.1. 1.创建一个新的Swift类
    2. 2.0.2. 2.在OC类中import Swift类
    3. 2.0.3. 3.在OC中调用Swift
  • 3. Swift单例的实现
  • ,