oc swift 添加_oc 添加swift库 - CSDN
精华内容
参与话题
  • 在项目中右键添加一个swift文件,我添加的LearnSwift.swift 添加后Xcode弹出‘是否配置oc桥接头文件’的提示,点确认,系统自动生成一个项目名-Bridging-Header.h的文件,我的是LearnSwift-Bridging-Header.h。 ...
    1. 在项目中右键添加一个swift文件,我添加的LearnSwift.swift
    2. 添加后Xcode弹出‘是否配置oc桥接头文件’的提示,点确认,系统自动生成一个项目名-Bridging-Header.h的文件,我的是LearnSwift-Bridging-Header.h
      配置oc桥接头文件的提示
    3. LearnSwift-Bridging-Header.h实质上是一个供swift使用的头文件,在这里把所有要暴露给swift的oc头文件都添加进去,这样写swift的时候就可以直接使用那些oc的类和方法了。
      因为swift本身没有头文件,只有.swift;而oc有.h和.m文件。有了这个声明,.swift就可以直接使用oc的.h了
      我的<code>LearnSwift-Bridging-Header.h</code>文件内容
    4. 接下来就可以直接在LearnSwift.swift中写swift代码啦 ~ 随便声明一个类,打些log:
      我的<code>LearnSwift.swift</code>文件内容
      编译直接通过,这就是在swift中使用oc类和方法了,一切顺利!
    5. 在oc中使用swift,我在AppDelegate.m中使用刚才创建的swift类,那么先要引用swift头文件,即#import "LearnSwift-Swift.h",然后在这个.m文件中就可以任意使用swift创建的类和方法了:
      LearnSwift *learnSwift = [[LearnSwift alloc] init];
      [learnSwift logsth:@"code from oc"];

      编译运行直接过! 输出:
      this is a log from swift : code from oc
    6. 理解下#import "LearnSwift-Swift.h"
      其实是项目名-Swift.h,这也是Xcode自动生成的,根据你写的所有swift代码,生成一个oc的.h文件,进行类和方法的声明,这样在oc里引用这个头文件后,就相当于引用了所有swift声明,可以直接使用了。
    展开全文
  • 虽然网上关于swiftoc混合编程的教程比较多,但是大多是基于 swift项目的,所以对咱们 OCer的参考价值有一定折扣. 现在swift虽然仍然存在很多缺陷,但是鉴于苹果的强势,是时候在项目中把简单的功能交给swift了,给...
     对于已经工作的开发者,并不适合也没有条件从一个全新的swift项目开始,进行开发. 虽然网上关于swift和oc混合编程的教程比较多,但是大多是基于 swift项目的,所以对咱们 OCer的参考价值有一定折扣.
    • 现在swift虽然仍然存在很多缺陷,但是鉴于苹果的强势,是时候在项目中把简单的功能交给swift了,给自己,给项目,给swift一个缓冲区,都是极好的.

      说了这么多,开始上代码.

      现在的背景是: 已经有一个oc项目了,我想要加入 swfit,并且实现 oc调用 swift ,swift调用oc .

      1.新建一个swift文件

      2.接下来会询问你是否建立桥接文件,点击是 ,那么我后面的就是多余的了,所以选择取消,我们手动建立桥接文件

      3.手动建立桥接文件:新建头文件

      关于命名: 有经验的人都知道,这个头文件是项目公用的,同时如果自动创建,文件名也是 :

      项目名-Bridging-Header.h

      但是因为我现在的项目名是中文,所以我自己命名了一下.

       

      4. 配置头文件

      在build setting里面搜索 swift ,根据实际情况进行配置:

      注意:是相对于工程文件所在的相对路径.从 Finder里面看,不要让项目中得group扰乱你的判断

      5.在头文件中引入需要的 oc头文件,这里我就用 UIKit了

       

      6.编写代码

       

      可以看到,我们可以使用UIKit的类了

      注意:关于自定义类,希望有个好的命名规范,那么在混合编程中,你将受益无穷

      7.oc调用swift

      现在因为测试我想把窗口的根控制器设置为我的swift的那个.

      因为swift没有头文件,所以不好办了...

      其实,系统默认给我们生成了头文件(需要我们的swift类是NSObject的直接或者间接子类),我们只要引入

      项目名-Swift.h

      没办法了,我的项目名是中文...

      引入:

      8.使用 swift的类

      9.运行

      一切正常 (好丑,不要吐槽)

       


    展开全文
  • OCSwift混编之桥接文件

    千次阅读 2019-06-12 16:08:35
    环境介绍: mac OS sierra 10.12.6 Xcode9(Version 9.0 (9A235)) OC的项目,项目中包含多个Target,用于实现环境分离。 目标:用Swift4.0版本版本进行普通混编开发... Swift访问OC OC访问Swift ...
    • 环境介绍:

      mac OS sierra 10.12.6
      Xcode9(Version 9.0 (9A235))
      OC的项目,项目中包含多个Target,用于实现环境分离。

      目标:用Swift4.0版本版本进行普通混编开发(此外还有开发Framework混编、引用外部Framework和宿主App混编)。

      普通混编说明

      Swift访问OC OC访问Swift
      不需要在Swift中import OC的类,统一在桥接文件(ProductName-Bridging-Header.h)中导入需要暴露给Swift的OC类即可在Swift中访问。 在OC类中导入ProductName-Swift.h文件(根据不同Target的名称,对应文件名称不同),即可访问Swift中暴露给OC的属性和方法。

      项目大体结构如如下图:

      项目概览.png

      一、Swift中如何访问OC的类

      当我们第一次在工程中创建一个.Swift文件,Xcode会提示你是否创建桥接文件,点击‘是’,Xcode会帮我们给每一个Target建立对应的桥接文件(用于在Swift中访问OC的类)。如果点击了‘否’,可以自己创建桥接文件,然后在下图位置指定桥接文件路径(注意每个Target都对应配置好)

      设置桥接路径.png

      由于不同Target下的桥接文件名称不一样,如果你觉得Swift需要访问OC下的类每个环境不需区分(我们工程中不需要),那么把各个Target下的桥接路径改成同一个即可,删除其他的桥接文件(以后若需区分可以再添加)省得需要同时往多个环境下导入OC的类

      设置桥接路径.png

       

      Xcode9默认混编下的Swift版本不是4.0,各个Target都配置一下

      设置Swift版本号.png

      在桥接文件中导入Swift需要访问的OC类,.Swift文件中即访问OC的类了

      暴露给Swift的文件列表.png

      p7.png

      二、OC中如何访问Swift的类(Swift4.0中想要暴露给OC的方法和属性前面都需添加@objc)

      首先,给每个Target下的build Settings的Defines Module设置为YES

      设置Defines Module.png

      由于Xcode会根据不同的Target的创建不同的‘Swift转换OC下生的成接口头文件’,英文:Objective-C Generated interface Header Name,如下图

      Swift转OC接口文件.png

      Swift转OC接口文件.png

      OC想要访问Swift的文件,需要根据不同Target下导入不同的接口文件,因此我们定义一个Swift.h文件,根据不同的Target导入不同的转接口文件即可。如下图:

      Swift转OC接口文件统一管理.png

      如果你没有在某个OC类中引入当前Target下的接口文件和编译,貌似是没有办法通过command+点击跳入进去。所以我们只需要在某个OC文件中导入该接口文件然后编译,就可以跳入进去了,这里为了方便,建立一个Swift.h文件,根据环境import不同的接口文件。

      上面的预编译宏在下图配置(不同Target配置不同的预编译宏,实现环境分离)

      OC预编译宏.png

      Swift下因为没有预编译宏,但是可以通过Swift Flags配置实现条件编译达到同样的效果(每添加一个标识前,都需要添加一个 -D ,Debug和Release模式下都需要添加-D ,不然编译器无法识别) :

      Swift编译变量.png

       

      至此,配置完成。

      Tip:

      1、Swift 3.2暴露给OC的属性和方法不需要添加@objc,但是4.0需要。
      2、如果你使用的Xcode9.0以下的版本,那么到你导入ProductName-Swift.h文件的时候可能报错,告诉你对应的接口文件(ProductName-Swift.h not found)找不到,但是你的各项配置都正确,应该是Xcode的编译器问题(Clean、重启都没用),直接run就好了,应该能run起来,虽然编译器一直提示报错,建议升级Xcode。
      3、直接拖动对应的Swift文件到工程的话,好像直接拖动添加.swift文件到工程Xcode不会添加到编译列表中,因此要注意检查拖动的文件是否添加到了build phase的编译列表中。
      4、OC项目混编Swift的时候,如果项目没有自动生成桥接文件(ProductName-Bridging-Header.h),那么你一定要自己创建并配置好路径。
      因为:没有桥接文件会影响到你的Swift转OC接口文件(ProductName-Swift.h)中Swift要暴露给OC生成的接口。具体影响有:假设你拖动了N个Swift类,虽然要暴露给OC的Swift基本类和方法都添加了@objc,但只有extention类会自动生成对应的转接口,其他类不会。

       



      作者:002and001
      链接:https://www.jianshu.com/p/754396e7e1bd
      来源:简书
      简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    展开全文
  • OC代码中使用Swift文件的实践

    千次阅读 2018-05-31 11:32:11
    最近在研究swift,就我看来,swift确实是比OC更优秀的语言,这可以体现在很多方面,网上已经对比的很透彻,就不一一赘述。 今天研究了一下如何在OC项目中使用swift文件,即OCswift的混编问题,发现在OC中要使用...

    最近在研究swift,就我看来,swift确实是比OC更优秀的语言,这可以体现在很多方面,网上已经对比的很透彻,就不一一赘述。
    今天研究了一下如何在OC项目中使用swift文件,即OC和swift的混编问题,发现在OC中要使用swift文件也是蛮简单的,实践过程列如下:
    1)首先随便创建了一个OC项目,就叫 DetialViewDemo
    这里写图片描述
    2)因为Swift的代码默认是使用module管理的,所以两者混编的最重要的一步,就是把我们的Swift代码作为一个module暴露给OC工程,具体步骤如下:
    这里写图片描述
    3)创建一个swift文件或者将已有的swift文件拖入项目中,我这里是拖入了一个练习swift写的一个类:
    这里写图片描述
    注意点:swift文件添加的时候会提示是否添加桥接文件,直接点击不创建就OK
    4)好了,文件都准备好了,接下来就需要在使用到swift文件的类中引入”Product Module Name-Swift.h”,其中Product Module Name其实就是项目的名称,这个在上面配置Module的图中也能看到,然后我们就可以愉快地和swift进行玩耍了
    这里写图片描述
    注意:引入Product Module Name-Swift.h的时候不一定自动提示,手写之后编译就可以了

    当然,我很好奇这是怎么回事,然后我就command+点击 Person 进入了内部查看,发现原来苹果将所有的swift文件中的代码转成了oc的代码,不管你引入多少个swift文件,都会一股脑在Product Module Name-Swift.h文件中翻译成oc文件以便我们oc程序调用
    这里写图片描述

    怎么样,很强大吧,朋友们赶紧转过来吧,开始自己的swift开发,这绝对是苹果的未来啊!

    展开全文
  • OCSwift如何相互调用

    2017-05-23 12:15:55
    文件是自动创建的在swift中调用OC代码使用的桥接文件,需要将在swift中使用的OC的相关头文件添加该此处
  • OCSwift 区别

    千次阅读 2019-09-26 15:34:11
    OCSwift 区别 一、block = 闭包 OC——block typedef void(^successBlock)(NSURL* url,id data); swift——闭包 typealias successBlock = (NSURL, AnyObject) -> Void; @escaping 逃逸闭包 :闭包...
  • OCswift相互调用

    千次阅读 2017-04-26 11:39:33
    一、OC调用swift文件 二、swift调用OC文件 三、注意和总结 添加: 四、自定义桥接文件  一、OC调用swift文件  在OC项目中创建一个swift文件的时候,Xcode 会提示 需要创建一个桥接文件,点确定...
  • oc调用swift

    千次阅读 2015-11-14 18:05:06
    如果你想在Objective-C工程中,嵌入Swift文件,实现OC调用Swift,那么这篇文章就能帮助你,由于本人最近在开发Swift项目,所以实现过OC调用Swift,在这过程中遇到过一些瓶颈,特此,将此文奉上,供大家参考。...
  • OCSwift混编

    千次阅读 2016-01-26 10:16:30
    Swift发展势头越来越好,而很多公司很难一下子从OC全部切换到swift,这个时候混编就显得那么的重要,本人也在逐渐的尝试混编然后逐步取代OC,从而全部转到swift上。 其实,从2014年swift刚出来的时候就开始研究swift...
  • OC项目中使用Swift

    万次阅读 2016-02-27 09:23:30
    OC项目中使用Swift 本文版权归作者所有,如需转载请联系孟祥月 CSDN博客:http://blog.csdn.net/mengxiangyue 独立博客:http://mengxiangyue.com 最近公司的项目开始计划使用Swift,由于原先的工程都是使用...
  • swift项目中,OCswift文件相互调用

    千次阅读 2017-08-10 13:40:38
    有时候 ,我们会涉及到双向混合编程,特别是OCswift的互相引用。   swift调用oc的方法: 1、桥接文件,一般是swift工程,在创建一个oc文件时,系统自动添加(不用改名,直接默认即可) 2、将需要引用...
  • 写项目时发现有的方法OC时没有,需要用swift来实现的,于是就跳进了混编配置的坑,参照了许多博客,爬了一上午才爬出来,在这总结一下我挖坑和填坑的经历,如有错误,欢迎纠正。 需求:OC项目中使用新建swift文件...
  • swift项目中 OCswift相互调用

    千次阅读 2018-06-29 19:33:51
    1、桥接文件,一般是swift工程,在创建一个oc文件时,系统自动添加(不用改名,直接默认即可) 2、将需要引用的oc文件 .h头文件 添加到桥接类中。 具体方法可以参考我的这篇博客,里面进行了详细讲解 oc调用...
  • IOS --- OCSwift混编

    2017-05-16 18:08:38
    先中简单的入手,先研究在同一个工程目录下混合使用的情况。...[cpp] view plaincopy--- OCSwift混编" TITLE="IOS --- OCSwift混编" />--- OCSwift混编" TITLE="IOS --- OCSwift混编" /> impor
  • OCswift混编包太大

    千次阅读 2018-01-29 17:29:50
    OCswift混编包太大问题
  • iOS开发(Swift)——SwiftOC的互用

    千次阅读 2019-01-13 16:44:31
    如何新建:一般情况,在Swift工程中新建一个OC类,或者在OC工程新建一个Swift类,系统就会提示你是否创建,选择是就行了,然后再删除你刚刚创建的无用文件。如下图(在OC工程中创建的): 如果你选择了取消,可能下一...
  • iOS之swiftOC混编、桥接

    千次阅读 2018-04-09 14:06:20
    参考:https://www.cnblogs.com/mazhiqiang/p/5557002.html=============swift中...在swift项目中创建一个OC文件的时候,Xcode 会提示创建一个桥接文件 点确定创建桥接文件,Xcode会自动创建一个桥接文件名字:工...
  • swfit和OC间的 联系 1.swift句尾不需要分号 ,除非你想在一行中写三行代码就加分号隔开。  2.swift不要写main函数 ,程序默认从上往下执行  3.swift不分.h和.m文件 ,一个类只有.swift一个文件  ...
1 2 3 4 5 ... 20
收藏数 8,553
精华内容 3,421
关键字:

oc swift 添加