1. 程式人生 > >OC 和 Swift 混編 OC 中呼叫 Swift

OC 和 Swift 混編 OC 中呼叫 Swift

1、建立一個Object-C工程:SwiftInObjectC


2、建立一個Object-C的類:SwiftLan(注意選擇)


當建立完成後,Xcode提示下面警告,會提問我們需不需要創意一個Bridge,當然我們選擇“Yes”。


這樣會在工程中看到一個“SwiftInObjectC-Bridging-Header.h”檔案。這個檔案的作用可以根據註釋看出來:


  1. //  
  2. //  Use this file to import your target's public headers that you would like to expose to Swift.  
  3. //  

3、下面一步是我們要修改“Bulid Setting” 中的 Defines Module 設定為“Yes” ,同時再看看Product Name 是不是工程的名字。如果是就不用管了

如果不是就改為工程名字。


4、在ViewController中引入標頭檔案 #import "SwiftInObjectC-Swift.h"SwiftInObjectC是設定的Product Name

5、在修改我們建立的SwiftLan 類如下:

  1. class SwiftLan: NSObject {  
  2.     /*  
  3.     // Only override drawRect: if you perform custom drawing.  
  4.     // An empty implementation adversely affects performance during animation.  
  5.     override func drawRect(rect: CGRect) {  
  6.         // Drawing code  
  7.     }  
  8.     */  
  9.     @objc(initWithData:)  
  10.     init(data: String){  
  11.         println(data);  
  12.     }  
  13. }  

6、在ViewController類中建立例項子如下:

  1. SwiftLan *tempString
     = [[SwiftLan alloc] initWithData:@"Test Swift"];  
  2. NSLog(@"%@",tempString);  

7、然後Build & Run 可以在 控制檯看見:


執行OK,說明我們已經成功在OC中使用了Swift 方法和類。

8、下面看看二個動效的Swift類,同樣的方法:

  1. [self.view addSubview:({  
  2.         NVActivityIndicatorType type  = NVActivityIndicatorTypePacman;  
  3.         NVActivityIndicatorView *temp = [[NVActivityIndicatorView alloc] initWithFrame:CGRectMake(0,0,80,80) type:type];  
  4.         temp.center = self.view.center;  
  5.         [temp startAnimation];  
  6.         temp;  
  7.     })];  
  8.     [self.view addSubview:({  
  9.         _testLabel = [[LTMorphingLabel alloc]initWithFrame:CGRectMake(0,200,self.view.bounds.size.width,80)];  
  10.         _testLabel.text = @"";  
  11.         _testLabel.textAlignment = NSTextAlignmentCenter;  
  12.         _testLabel.textColor = [UIColor whiteColor];  
  13.         _testLabel.font = [UIFont systemFontOfSize:28];  
  14.         _testLabel;  
  15.     })];  
效果如下:


9、說明的一點是Swift的 Enum和 OC的 Enum 的 轉換 :

原來的:

  1. public enum NVActivityIndicatorType  {  
  2.     case Blank  
  3.     case BallPulse  
  4.     case BallGridPulse  
  5.     case BallClipRotate  
  6.     case SquareSpin  
  7. }  

新增新的:
  1. @objc public enum NVActivityIndicatorType :Int{  
  2.     case Blank  
  3.     case BallPulse  
  4.     case BallGridPulse  
  5.     case BallClipRotate  
  6.     case SquareSpin  
  7. }  
做了上面的轉變後在OC中就可以使用Swift的Enum型別了

使用方法如下:

  1. //NVActivityIndicatorType type  = NVActivityIndicatorTypePacman;  
  2. //NVActivityIndicatorType type  = NVActivityIndicatorTypeBallClipRotate;  
  3. //NVActivityIndicatorType type  = NVActivityIndicatorTypeBallScale;  

注意是NVActivityIndicatorType無縫連線 具體某個列舉的型別Pacman,變為了“NVActivityIndicatorTypePacman”

原始碼下載

轉自:http://blog.csdn.net/justinjing0612/article/details/47752367