• Objective-C调用Swift 2014-08-17 17:05:05
    Objective-C调用Swift如果已经有了一个老的iOS应用,它是使用Objective-C编写的,而它的一些新功能需要采用Swift来编写,这时就可以从Objective-C调用Swift。Objective-C调用Swift时不需要桥接头文件,而是需要Xcode...

    如果已经有了一个老的iOS应用,它是使用Objective-C编写的,而它的一些新功能需要采用Swift来编写,这时就可以从Objective-C调用Swift。

    Objective-C调用Swift时不需要桥接头文件,而是需要Xcode生成的头文件。这种文件由Xcode生成,不需要我们维护,对于开发人员也是不可见的。如下图所示,它能够将Swift中的类暴露给Objective-C,它的命名是:<工程名>-swift.h。我们需要将该头文件引入到Objective-C文件中,而且Swift中的类需要声明为@objc。

    创建Objective-C工程

    为了能够更好地介绍混合搭配调用,我们首先创建一个Objective-C工程。出于简单考虑,我们可以创建一个Mac OS X命令行工程。

    启动Xcode 6,然后单击File→New→Project菜单,在打开的Choose atemplate for your new project界面中选择“OS X→Application→Command Line Tool”工程模板(如下图所示)。


    接着单击“Next”按钮,随即出现如下图所示的界面。


    在Product Name中输入“HelloWorld”,在Language中选择Objective-C,其他的项目可以结合自己的实际情况输入内容。相关的工程选项设置完成后,单击“Next”按钮,后面的步类似。

    创建成功后的界面如下图所示,在左边的导航栏中生成了一个main.m文件。打开main.m文件,可以在右边的代码界面中看到它的代码,我们还可以在这里编写代码。


    在Objective-C工程中添加Swift类

    我们刚刚创建了Objective-C的工程,需要添加Swift类到工程中。具体过程是,右键选择HelloWorld组,选择菜单中的“New File…”弹出新建文件模板对话框。如下图所示,选择OS X→Source→Cocoa Class。


    接着单击“Next”按钮,随即出现如图下所示的界面。在Class中输入“SwiftObject”,在Language中选择Swift,其他的选项保持默认值就可以了。


    相关选项设置完成后,单击“Next”按钮,进入保存文件界面,根据提示选择存放文件的位置,然后单击“Create”按钮创建Swift类。如果工程中没有桥接头文件,在创建过程中,Xcode也会提示我们是否添加桥接头文件,可以选择不添加。

    调用代码

    Swift的SwiftObject创建完成后,我们会在Xcode工程中看到新增加的SwiftObject.swift文件。

    SwiftObject.swift代码如下:

     

    import Foundation                                                               ①
     
    @objc class SwiftObject: NSObject {                     ②
     
    Func sayHello(greeting : String, withName name : String) ->String {      ③
     
    var string = "Hi," + name
    string += greeting
     
    return string;
        }
    }

    上述代码第①行引入了Foundation框架的头文件。第②行代码定义SwiftObject类,SwiftObject类继承自NSObject类。另外,我们在类前面声明为@objc,@objc所声明的类能够被Objective-C访问,@objc还可以修饰属性。

    第③行代码定义了sayHello方法,它有两个参数,第一个参数不需要指定外部参数名,第二个参数(除了第一个以后所有的参数)需要指定外部参数名,例如withName是name参数的外部参数名。这是为了方便在Objective-C中调用。

    下面看Objective-C端的代码,main.m文件代码如下:

    #import <Foundation/Foundation.h>
    #import "HelloWorld-swift.h"                            ①
     
    int main(intargc, const char * argv[]) {
     
    SwiftObject *sobj = [[SwiftObjectalloc] init];          ②
    NSString *hello = [sobjsayHello:@"Good morning"withName:@"Tony"];        ③
     
    NSLog(@"%@",hello);                                                         ④
     
    return 0;
    }

     上述代码第①行引入头文件HelloWorld-swift.h,它是Objective-C调用Swift对象所必需的,它的命名规则是“<工程名>-swift.h”。

    第②行代码实例化SwiftObject对象,SwiftObject是Swift中定义的类。第③行代码调用SwiftObject的sayHello方法,它在Objective-C中被调用时的方法和参数命名与SwiftObject的方法和参数之间的对应关系如下图所示。

     


    第④行代码NSLog(@"%@",hello)用于输出结果,输出结果如下:

    2014-07-05 14:25:43.879HelloWorld[3266:303] Hi,TonyGood morning

    这样就实现了在Objective-C中调用Swift代码,我们可以借助于这样的调用充分利用已有的Swift文件,减少重复编写代码,提高工作效率。


    更多内容请关注国内第一本Swift图书《Swift开发指南》
    本书交流讨论网站:http://www.51work6.com/swift.php
    欢迎加入Swift技术讨论群:362298485

    欢迎关注智捷iOS课堂微信公共平台



    展开全文
  • 如果你正要从Objective-C过渡到Swift,或反过来,一个在两种语言间显示等效代码的小手册会很有帮助。本文内容就是这些:苹果开发者的红宝书,包含变量,集合,函数,类等等。下面例子中,上面是Objective-C代码,...
  • Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OSiOS平台,用于搭建基于苹果平台的应用程序。
  • Swift Object-c 相互调用 2015-11-06 11:35:31
    我们先看一下Swift调用Object-c 首先我们创建一个OC类 到最后一步的时候发现多了一个确认框,点击Yes 系统会生成一个Swift和OC的转换桥梁。 他的命名规则是 项目名称-Bridging-Header.h 这个是系统生成的...
  • 一、Swift和Objective-C的联系 Swift和Objective-C共用一套运行时环境,Swift的类型可以桥接到Objective-C(下面我简称OC),反之亦然。两者可以互相引用混合编程。其次就是,OC之前积累的很多类库,在Swift中大...
  • 尽管热议不断,但是 Swift 还是凭借自身的魅力迅速杀入 Tioble 排行版前十,并且在不断的改造更新下,在5.0版本终于迎来了ABI的稳定, 也就是说,今后 Swift 语法不会再有大的变更,也不会在更新一个大版本之后就...
  • 1、创建一个Object-C工程:SwiftInObjectC 2、创建一个Object-C的类:SwiftLan(注意选择) 当创建完成后,Xcode提示下面警告,会提问我们需不需要创意一个Bridge,当然我们选择“Yes”。 这样会在工程中看到一...
  • Object-CSwift混合开发 2019-05-15 00:52:55
    Object-C作为Apple的iOS App开发语言服务了许多个年头,2014年Apple推出了新的编程语言Swift,更高效更安全的口号再次吸引了一大批非iOS开发程序员进入,小编认为Swift取代Object-C只是时间问题,在神州这片土地上,...
  • IOS Object-CSwift相互调用 2016-02-01 23:49:24
    随着现在Swift语言的崛起,很多人已经开始用Swift语言做开发了,但是由于现在很多第三方框架仍然使用object-c开发,所以这个时候Swift和object-c混合编程显得举足轻重了。 object-c 调用 swift: 1.创建好object-...
  • Objective-C的语法比较复杂,学习成本非常高,其复杂主要体现在它的类的创建、函数的实现其他的高级特性上。 Swift是2013年苹果发布的一种新的iOS开发语言,其目的在于替代复杂的Objective-CSwift的设计借鉴了...
  • 各位亲爱的iOS与OS X应用程序开发人员,如今正是将...如果大家从事移动设备应用程序开发工作,但却还没体验过Swift,那请注意啦:Swift不仅仅是一种希望在Mac、iPhone、iPad、Apple Watch以及其它未来设备上取代Objecti
  • Object-C -> Swift3.0 2016-07-28 21:39:52
    当我们开始接触一门新语言时,我们难免避免不了类型基本语法规则。我们会急切的想知道如何用新的语法...本文旨在对于Object-C和Swift做一些基本的对比。通过阅读本文,您能快速的了解Swift3.0和Object-C的一些差别
  • Swift:引入Object-c代码 2015-06-12 15:32:14
    新建的项目默认使用的swift语言,创建后,需要引入object-c的代码,这时候需要1.创建一个 header文件工程名-Bridging-Header.h2.设置path在target-Build Settings-Swift Compiler -Code Generation中的Object-c ...
  • object-c和swift能够实现类似触动精灵一样的模拟点击滑动找色的功能吗?
  • 2、创建一个Object-C的类:RoundImageView(自定义一个圆角的UIImageView)注意要选择Object-C代码 当创建完成后,Xcode提示下面警告,会提问我们需不需要创意一个Bridge,当然我们选择“Yes”。 3、在...
  • 摘要: SendBird是国外一款针对移动App网站的Chat API,其开发团队成员Jed Gyeong分享了他们在将产品从Objective-CSwift转换过程中所学习到的一些心得体会。 SendBird为常见系统均提供了示例UI,方便开发者构建...
  • Object-C swift桥接文件 2019-06-11 22:33:11
    题记:一直觉得好记性不如烂笔头, 加上有整理东西的习惯, 这些小东西,想想也随手整理下吧. 一 创建head文件 放入项目中 桥接文件就是一个头文件 名字规范 还是项目名称-Bridging-Header 二 在项目中配置桥接文件 ...
  • 原文地址:...Using Objective-C Classes in Swift ** If you have an existing class that you'd like to use, perform Step 2 an
  • 想学习iOS开发,首先就必须学会一门语言,支持iOS开发有俩门语言(objectIve-c和Swift),这篇文章我们先学习object-c,如果想学习swift可以自行百度。  接下就是正文了,大多以截图的形式 这是第一个.m文件   ...
  • 一款用Object-C语言编写的视频播放器框架
1 2 3 4 5 ... 20
收藏数 13,138
精华内容 5,255