OC 和 Swift 混編 OC 中呼叫 Swift
阿新 • • 發佈:2019-02-04
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
- 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
- }
使用方法如下:
- //NVActivityIndicatorType type = NVActivityIndicatorTypePacman;
- //NVActivityIndicatorType type = NVActivityIndicatorTypeBallClipRotate;
- //NVActivityIndicatorType type = NVActivityIndicatorTypeBallScale;
注意是NVActivityIndicatorType無縫連線 具體某個列舉的型別Pacman,變為了“NVActivityIndicatorTypePacman”
轉自:http://blog.csdn.net/justinjing0612/article/details/47752367