首页 > 代码库 > iOS: 学习笔记, Swift与Objective-C混用简明教程(转载)

iOS: 学习笔记, Swift与Objective-C混用简明教程(转载)

Swift与Objective-C混用简明教程

转载自:https://github.com/lifedim/SwiftCasts/tree/master/000_mix_swift_objc

我想很多iOS开发者在知道Swift后,心中最大的问题就是如何将Swift应用到原有项目之中。下面我将简要介绍这2种语言的混用方法,内容参考自官方文档 Using Swift with Cocoa and Objective-C ,推荐大家阅读。

在Swift中使用Objective-C类

  • 在Xcode6中新建文件(?+N),选择Swift,然后系统框提示是否同时创建XXX-Bridging-Header.h文件(XXX为你的项目名称),确定。

    这个自动创建出来的Bridging-Header.h文件是沟通Swift世界和Objective-C世界的桥梁任何需要在Swift文件中使用的自定义Objective-C类,必需先引入此Header文件

    假设项目名称为TestSwift,其中存在Objective-C类Note(在Note.m中定义):

      @interface Note : NSObject  - (void)log;  @end

    想在Swift中引用这个类,首先需要在TestSwift-Bridging-Header.h文件中import Note:

      #import "Note.h"

    然后在Swift代码中就能使用Note了:

    class ViewController: UIViewController {      override func viewDidLoad() {          super.viewDidLoad()          var a:Note = Note()          a.log()      }  }

在Objective-C中使用Swift类

  • 想在Objective-C文件中引用Swift文件中定义的类,需要在Objective-C文件中引入一个特殊的头文件: XXX-Swift.h,假设项目名称为 TestSwift,那么这个需要引入的header文件为TestSwift-Swift.h

    假设存在Book类(在Book.swift文件中定义):

      import Foundation  class Book : NSObject {      var title:String      init() {          self.title = "Default Book"      }      func log() {          println(self.title)      }  }

    在需要引用Book类的Objective-C文件中,先引入TestSwift-Swift.h头文件(此文件不需要创建)

    #import "TestSwift-Swift.h"

    然后就能使用Book了:

     Book *book = [Book new]; [book log];

    最后再啰嗦一句,XXX-Swift.h文件在项目中是不可见的(估计此文件在编译时自动生成),在使用时只需遵循苹果既定规则就OK了。