在Swift语言中可以直接调用Objective-C的类库,比如Foundation框架。
下面是一个简单的Objective-C的Hello World实现。
#import <Foundation/Foundation.h>
int main(int argc,const char* argv[])
{
@autoreleasepool {
//初始化字符串,类型为NSString
NSString *string = [ [NSString alloc] initWithFormat:@"%@ %@",@"Hello",@"World"];
//调用lowercaseString属性,将字符串转换为小写
string = [string lowercaseString];
//替换其中的world为objective-c
string = [string stringByReplacingOccurrencesOfString:@"world" withString:@"objective-c"];
////输出结果
NSLog(@"%@",string);
}
}
下面是用Swift语言版本的实现。
import Foundation
var string = NSString(format: "%@ %@","hello","world")
string = string.lowercaseString
string = string.stringByReplacingOccurrencesOfString("world",withString: "swift")
print(string)
在Swift语言中,文件头部用import Foundation导入Foundation框架,初始化对象无需调用alloc方法,Objective-C初始化对象一般需要调用initWith开头的方法。Swift语言初始化对象只需要对象的名称加上括号即可,在括号中传参。
在Swift中调用Objective-C代码。新建一个Swift语言的项目,新建objective-c的头文件(Calculator.h)和实现文件(Calculator.m),添加.m文件时Xcode会提示是否创建Objective-C briding头文件,选Yes,会自动创建一个头文件,格式是”项目名-Bridging-Header”,在桥接文件中里写上 #include “Calculator.h”。
各文件代码如下:
Calculator.h
#ifndef Calculator_h
#define Calculator_h
#include <Foundation/NSObject.h>
@interface Calculator : NSObject
@property (nonatomic,assign) int first;
@property (nonatomic,assign) int second;
-(id) init;//空构造函数
-(id) initWithFirst:(int)first second:(int) second;//带参数的构造函数
-(int)add;//加
-(int)sub;//减
@end
#endif /* Calculator_h */
Calculator.m
#include "Calculator.h"
@implementation Calculator
@synthesize first;
@synthesize second;
-(id) init
{
if (self = [super init]) {
self.first = 1;
self.second = 1;
}
return self;
}
-(id) initWithFirst:(int)newFirst second:(int)newSecond
{
if (self = [super init]) {
self.first = newFirst;
self.second = newSecond;
}
return self;
}
-(int)add
{
return self.first + self.second;
}
-(int)sub
{
return self.first - self.second;
}
@end
TestSwift-Bridging-Header.h
#include "Calculator.h"
main.swift
import Foundation
var cal = Calculator()
print(cal.add())
print(cal.sub())
cal = Calculator(first:20,second:2);
print(cal.add())
print(cal.sub())
输出结果:
2
0
22
18
结果符合预期.
参考资料: 1.《Swift语言实战入门》,人民邮电出版社,伍星、罗飞等著.