1、创建一个Object-C工程:SwiftInObjectC
2、创建一个Object-C的类:SwiftLan(注意选择)
当创建完成后,Xcode提示下面警告,会提问我们需不需要创意一个Bridge,当然我们选择“Yes”。
这样会在工程中看到一个“SwiftInObjectC-Bridging-Header.h”文件。这个文件的作用可以根据注释看出来:
// // Use this file to import your target's public headers that you would like to expose to Swift. //
3、下面一步是我们要修改“Bulid Setting” 中的 Defines Module 设置为“Yes” ,同时再看看Product Name 是不是工程的名字。如果是就不用管了
如果不是就改为工程名字。
4、在ViewController中引入头文件 #import "SwiftInObjectC-Swift.h"(SwiftInObjectC是设置的Product Name)
5、在修改我们创建的SwiftLan 类如下:
class SwiftLan: NSObject { /* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. override func drawRect(rect: CGRect) { // Drawing code } */ @objc(initWithData:) init(data: String){ println(data); } }
6、在ViewController类中创建实例子如下:
SwiftLan *tempString = [[SwiftLan alloc] initWithData:@"Test Swift"]; NSLog(@"%@",tempString);
7、然后Build & Run 可以在 控制台看见:
运行OK,说明我们已经成功在OC中使用了Swift 方法和类。
8、下面看看二个动效的Swift类,同样的方法:
[self.view addSubview:({ NVActivityIndicatorType type = NVActivityIndicatorTypePacman; NVActivityIndicatorView *temp = [[NVActivityIndicatorView alloc] initWithFrame:CGRectMake(0,0,80,80) type:type]; temp.center = self.view.center; [temp startAnimation]; temp; })]; [self.view addSubview:({ _testLabel = [[LTMorphingLabel alloc]initWithFrame:CGRectMake(0,200,self.view.bounds.size.width,80)]; _testLabel.text = @""; _testLabel.textAlignment = NSTextAlignmentCenter; _testLabel.textColor = [UIColor whiteColor]; _testLabel.font = [UIFont systemFontOfSize:28]; _testLabel; })];效果如下:
9、说明的一点是Swift的 Enum和 OC的 Enum 的 转换 :
原来的:
public enum NVActivityIndicatorType { case Blank case BallPulse case BallGridPulse case BallClipRotate case SquareSpin }
@objc public enum NVActivityIndicatorType :Int{ case Blank case BallPulse case BallGridPulse case BallClipRotate case SquareSpin }做了上面的转变后在OC中就可以使用Swift的Enum类型了
使用方法如下:
//NVActivityIndicatorType type = NVActivityIndicatorTypePacman; //NVActivityIndicatorType type = NVActivityIndicatorTypeBallClipRotate; //NVActivityIndicatorType type = NVActivityIndicatorTypeBallScale;
源代码下载