• OCSwift之间的互调很简单,iOS8以后官方给出了这两种语言之间的桥接方案,简单说就是在Swift工程中,通过提示创建的Bridging头文件可以将OC文件和Swift文件衔接在一起,从而可以在OC文件中引用Swift类,或者在...

    OC和Swift之间的互调很简单,iOS8以后官方给出了这两种语言之间的桥接方案,简单说就是在Swift工程中,通过提示创建的Bridging头文件可以将OC文件和Swift文件衔接在一起,从而可以在OC文件中引用Swift类,或者在Swift文件中引用OC的类。应用较多的主要是在Swift中调用OC类,使得在最新的swift工程中仍然能够兼容使用以前的OC类库等。

    这里通过一个简单的例子展示在Swift工程中OC和Swift之间的互调:

    首先建立一个Swift工程,这里创建了一个Single View Application,工程名为SwiftBridge,并分别新建了一个新的名为SwiftClass的swift类文件和一个名为OCClass的OC类文件,创建第一个OC文件后会提示创建一个Bridging头文件,创建后就可以对两者进行桥接:

    这里我们在ViewController.swift中调用OCClass类,同时在OCClass类中调用SwiftClass.swift。其中在swift中引用OC类时要在Bridging头文件中引入OC类的头文件(swift文件中没有头文件及其引用),而在OC中引用swift类时直接引入“SwiftBridge-swift.h”即可,不需要在Bridging头文件设置,其中“SwiftBridge”为工程名,该文件是隐藏的,对工程中所有swift类文件进行了向OC语言的翻译,从而在OC文件中可以像调用其他OC文件一样调用工程中的swift类文件。

    1. 在SwiftClass.swift中定义一个实例方法和一个类方法:
    import UIKit
    
    class SwiftClass: NSObject {
        func SwiftInstanceMethod() -> Void {
            print("swift instance method!");
        }
        class func SwiftClassMethod() -> Void {
            print("swift class method!");
        }
    }
    1. 在OCClass类中调用SwiftClass:
    /* OCClass.h */
    #import <Foundation/Foundation.h>
    
    @interface OCClass : NSObject
    - (void)OCInstanceMethod;
    + (void)OCClassMethod;
    @end
    
    /* OCClass.m */
    #import "OCClass.h"
    #import "SwiftBridge-swift.h" /* 引入swift类头文件 */
    
    @implementation OCClass
    - (void)OCInstanceMethod {
        /* 调用swift实例方法 */
        SwiftClass *swiftc = [[SwiftClass alloc] init];
        [swiftc SwiftInstanceMethod];
        NSLog(@"oc instance method!");
    }
    + (void)OCClassMethod {
        /* 调用swift类方法 */
        [SwiftClass SwiftClassMethod];
        NSLog(@"oc class method!");
    }
    @end
    1. 在Bridging头文件引入OC类头文件供swift调用:
    /* SwiftBridge-swift.h */
    #import "OCClass.h"
    1. 在ViewController.swift中调用OCClass类:
    /* ViewController.swift */
    import UIKit
    class ViewController: UIViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let occ = OCClass()
            occ.ocInstanceMethod()
            OCClass.ocClassMethod()
        }
    }

    打印结果:

    swift instance method!
    2017-04-12 12:40:39.657 SwiftBridge[3773:5420107] oc instance method!
    swift class method!
    2017-04-12 12:40:39.657 SwiftBridge[3773:5420107] oc class method!

    另外类似的也可以实现swift和C语言之间的互调。

    展开全文
  • iOS OC项目调用Swift类

    2017-03-17 13:51:27
    网上有很多关于OC项目中使用Swift类的方法,但是亲自试了之后,发现不够详细,多次尝试后,终于找出详细的方法。 现把方法和遇到的问题,记录下来,方便其他同仁借鉴.

    网上有很多关于OC项目中使用Swift类的方法,但是亲自试了之后,发现不够详细,多次尝试后,终于找出详细的方法。
    现把方法和遇到的问题,记录下来,方便其他同仁借鉴:

    一、新建一个OC工程,工程名称自定,在这里我定义为OCAndSwiftDemo,如图:

    新建项目架构图

    二、在新建Swift类之前,进行相关设置,如图:

    相关设置

    三、在项目中,新建一个TestDemo的swift类,点击Create后,提示如图:

    创建OC调用Swift类的桥接文件

    选择Create Bridging Header,一定要选择这个,如果不选择,就引入不了Swift类,然后生成”项目名称-Bridging-Header.h”桥接文件

    然后编辑Swift类,如果Swift类想要被OC发现,必须继承自NSObject,如图:

    TestDemo类

    四、调用Swift类,我们想要调用Swift类的方法里面引入头文件:”项目名称-Swift.h”,如图:

    调用Swift类

    注释:如果调用不了Swift类,可以先Shift+Command+R一下。

    展开全文
  • SwiftOC相互

    2016-08-05 19:07:56
    在项目中不免会有多中语言开发, 不说别的就我个人而言, 之前一直都是用 OC 写的代码, 封装很多工具, 而苹果新出来 Swift , 现在项目在向 Swift 过渡, 或者新项目是 Swift , 不想浪费时间用 Swift 封装工具, 再说...

    在项目中不免会有多中语言开发, 不说别的就我个人而言, 之前一直都是用 OC 写的代码, 封装很多工具类, 而苹果新出来 Swift , 现在项目在向 Swift 过渡, 或者新项目是 Swift , 暂时没有时间用 Swift 封装工具类, 但有想在 OC 中可以用 Swift 的代码, Swift 文件也可以用 OC 的代码, 此时我们只要通过响应的配置做好桥接即可在 Swift 和 OC 中相互使用对方的资源!!!

    下面我就给大家分享 Swift 与 OC 相互调用的配置以及注意点!!!

    建议收藏!!!

    1. Swift 调用 OC

    • 创建桥接文件件—>xxxx.h
    • 在桥接文件中导入OC代码头文件
    • 配置桥接文件: 项目 ->buildSettings —> bridging —> 配置

    创建桥接文件.png

    配置桥接文件.png

    桥接文件相对路径.png

    在桥接文件中导入 OC 类头文件.png

    在 Swift 文件中使用 OC 类.png


    2. OC 调用 Swift

    • 项目名字不能随便起:
      • 不能有特殊符号(@ # $ % ^ ~ ! ? < > & - _ + , . " ' | \ { ( ) })
      • 也不能有中文
      • 最好纯英文(和数字), 以英文字母开头
    • Swift中的类/属性/法必须使 public修饰
    • 导入 项目名称-Swift.h

    Swift中的类/属性/法必须使 public修饰.png

    OC项目调用 Swift 文件.png


    展开全文
  • [Swift]1.在OC项目里的OC代码调用Swift方法,Swift代码里调用OC代码。2.在Swift项目里的Swift代码里调用OC代码,OC代码调用Swift方法。
  • 2. 在swiftOC混编的编译环境下, oc类不能访问swift创建中的代理? 解决方法如下: 在代理的头部加上 @objc(代理名字),这样就在外部就可以访问了,如下图。 然后就和oc中的代理一样,写上协议方法...


    1. swift与oc混编译具体怎么实现,这儿我就不重复讲出了,网上有大把的人讲解。

    2. 在swift与OC混编的编译环境下, oc类不能访问swift创建类中的代理?

    解决方法如下:



    在代理的头部加上 @objc(代理名字),这样就在外部就可以访问了,如下图。 然后就和oc中的代理一样,写上协议方法,就可以进行你想要的操作了。



    3. swift中的回调方法介绍:

       1. 通过代理 ,写法大家可以看上面的两张图片,和oc代理差不多。

       2. 通过闭包来实现oc中代码块(Block)的方法,来进行代码回调

           2.1 定义  (swift类)

          

          2.2 调用   (swift类)

        

         2.3 具体回调处:(OC - 类)

         


    本文持续更新, 看oc与swift 混编有哪些雷,需要我们踩

    展开全文
  • 2019独角兽企业重金招聘Python工程师标准>>> ...

     


    151951_w33j_2613440.png


    报错原因

    Swift项目中

    OC文件类  继承  Swift文件类


    Cannot subclass a class with objc_subclassing_restricted attribute

     

    不能用objc_子类_限制子类化一个类的属性

    转载于:https://my.oschina.net/codeismygirl/blog/670912

    展开全文
  • OC 调用 Swift 方法

    2018-09-06 11:47:34
    1.新建Swift文件之前做以下设置 2.创建Swift文件后,会提示... 3.Swift import Foundation class RealmManager: NSObject { override init() { super.init() } @objc func getConins() -&gt; Str...
  • iOS oc 调用 swift

    2019-07-03 07:14:24
    如股票oc要调用swift里面的代码 需要包含固定这个头文件 项目名称 LiqunSwiftDemo-Swift.h ...LiqunSwiftDemo-Swift 点进去 可以看到 所有的swift代码 都产生了 对应的一个 oc 也就是 编译过程...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?...最新一些学妹问起,所以抽点时间来写的,适合入门...1. 第一个方向从 swift工程 中引入 oc类   1. 1 如何在swift中使用oc类  1.2 如何在s
  • OCswift相互调用

    2017-04-26 11:39:33
    一、OC调用swift文件 二、swift调用OC文件 三、注意和总结 添加: 四、自定义桥接文件  一、OC调用swift文件  在OC项目中创建一个swift文件的时候,Xcode 会提示 需要创建一个桥接文件,点确定...
  • 说起这个话题,在我看来,比项目中的OC混编C++,C等简单些,毕竟OC和...OC类中可以引入Swift语言写的,同样,Swift类中也可以引入OC语言写的,这点首先我们得毋庸置疑! 1.OC中引入Swift: 2.Swift中引入OC
  • 有时候 ,我们会涉及双向混合编程,特别是OCswift的互相引用。   swift调用oc的方法: 1、桥接文件,一般是swift工程,在创建一个oc文件时,系统自动添加(不用改名,直接默认即可) 2、将需要引用...
  • swift调用oc: 需要在统一的bridge头文件(xxx-Bridging-Header.h)里面import,然后即可使用。 oc调用swift: 需要在暴露出来的方法和属性上加@objc否则不可用。需要在工程配置里面做一些小改动。 具体设置和内容...
  • OC工程调用Swift方法

    2017-01-11 11:45:08
    1.建一个OC工程命名为SwiftOC 2.新建一个swfit文件命名为Test.swift,会弹出提示,选择Create Bridging Header建立桥接文件,系统会建立“工程名-Bridging-Header.h” 3.配置工程 设置Defines Module 为Yes ...
  • oc调用swift

    2015-11-14 18:05:06
    如果你想在Objective-C工程中,嵌入Swift文件,实现OC调用Swift,那么这篇文章就能帮助你,由于本人最近在开发Swift项目,所以实现过OC调用Swift,在这过程中遇到过一些瓶颈,特此,将此文奉上,供大家参考。...
  • 本文旨在帮助开发者快速从OC开发过渡到Swift开发,挑选了一些比较浅显的但是比较常用的Swift语法特性,在介绍的过程中,通常会拿OC中的语言特性作比较,让大家更好的注意到Swift的不同。 另外需要说明的是,笔者也...
1 2 3 4 5 ... 20
收藏数 2,968
精华内容 1,187