oc里面使用swift代码_swift使用oc代码 - CSDN
  • OC项目中使用Swift

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

    OC项目中使用Swift

    本文版权归作者所有,如需转载请联系孟祥月
    CSDN博客:http://blog.csdn.net/mengxiangyue
    独立博客:http://mengxiangyue.com

    最近公司的项目开始计划使用Swift,由于原先的工程都是使用OC编写的,不可能一下全部转换成Swift,所以采用OC与Swift混编的方式是最好的选择。这篇文章只是一个简单的介绍,并没有太高深的知识。

    我新建了一个演示的OC工程,当然你可以使用你已经存在的OC的工程。如果我们想要在OC工程中使用Swift的代码,Swift的代码默认是使用module管理的,同样这里我们也需要把我们的Swift代码作为一个module暴露给我们的OC工程,修改下面的配置:

    上面的修改了一个配置项,有一个Product Module Name在后面会使用。

    在工程里面点击File/New/File…,选择iOS/Source/Cocoa Touch Class,按照如下填写创建一个新的文件:

    上图中的Subclass of一定要设置为NSObject或其子类,否则OC工程将不会找到该类。

    点击确认后会选择保存路径,点击Create,出现如下界面:

    这个界面是询问是否创建桥接的头文件,这个文件在Swift调用OC代码的时候比较管用,但是在OC中调用Swift的时候我发现没有什么卵用。

    选择Don’t Create按钮。

    在Test.swift中添加如下的代码(解释都在注释里面了):

    import UIKit
    
    /*
        如果Swift类想要被OC发现,必须继承自NSObject并且使用public标记,并且该类中想要被OC访问的方法也必须使用public标记,具体知识可以去看Swift的访问控制
        原因:Swift的代码对于OC来说是作为一个module存在的
    
        当然全局的Swift函数,我还没发现怎么在OC中访问,如果哪位清楚还请告诉一下,谢谢!
    */
    
    
    public class Test: NSObject {
        public func log() {
            print("这是Swift的方法")
        }
    }
    
    public func globalLog() {
        print("这是Swift全局的log方法")
    }

    我们在我们想要调用Swift类的方法里面引入头文件:”Product Module Name-Swift.h”,其中Product Module Name替换成在上面配置项中显示的内容,例如:

    #import "ViewController.h"
    // 引入Swift头文件
    #import "OCAndSwift-Swift.h"
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // 使用Swift的类
        Test *test = [[Test alloc] init];
        [test log];
    }
    
    @end

    这样我们就能够在OC中使用Swift的代码了,最后还要说明一点:”Product Module Name-Swift.h”(例子中的是OCAndSwift-Swift.h),是由编译器自动生成的,如果import后没有提示,编译一下。并且只有在工程中包含至少一个Swift文件的时候,才会自动生成这个文件,所以如果工程中如果没有Swift文件的时候,就算在配置中设置对了,import该文件也会报错。

    展开全文
  • OC中调用Swift代码方法

    2018-06-03 09:27:48
    最近在项目中使用到了Swift语言写的第三方的框架,所以在这里将OC使用Swift的方法说明一下。1.首先要在Build Setting中进行相关配置2.在Podfile文件中要加上use_frameworks!为什么要加use_frameworks!呢?首先需要...

    最近在项目中使用到了Swift语言写的第三方的框架,所以在这里将OC中使用Swift的方法说明一下。

    1.首先要在Build Setting中进行相关配置

    2.在Podfile文件中要加上use_frameworks!

    为什么要加use_frameworks!呢?

    首先需要了解下静态库,动态库,Framework的区别

    所谓的库就是一段编译好的二进制文件,加上头文件,相关的资源文件就可供别人使用

    静态库:(静态链接库)(.a)在编译时会将库copy一份到目标程序中,编译完成之后,目标程序不依赖外部的库,也可以运行

                   缺点是会使应用程序变大

    动态库:(.dylib)编译时只存储了指向动态库的引用。
                   可以多个程序指向这个库,在运行时才加载,不会使体积变大,

                   但是运行时加载会损耗部分性能,并且依赖外部的环境,如果库不存在或者版本不正确则无法运行

    Framework:实际上是一种打包方式,将库的二进制文件,头文件和有关的资源文件打包到一起,方便管理和分发。

    iOS8 / Xcode 6 之前是无法使用静态库,出现了AppExtension之后可以使用

    对于是否使用Framework,CocoaPods 通过use_frameworks来控制
    1. 不使用use_frameworks! -> static libraries 方式 -> 生成.a文件
    在Podfile中如不加use_frameworks!,cocoapods会生成相应的 .a文件(静态链接库),
    Link Binary With Libraries: libPods-**.a 包含了其他用pod导入有第三库的.a文件
    2.use_frameworks! -> dynamic frameworks 方式 -> 生成.framework文件
    使用了use_frameworks!,cocoapods会生成对应的frameworks文件(包含了头文件,二进制文件,资源文件等等)
    Link Binary With Libraries:Pods_xxx.framework包含了其它用pod导入的第三方框架的.framework文件
    1.纯oc项目中 通过pod导入纯oc项目, 一般都不使用frameworks
    2.swift 项目中通过pod导入swift项目,必须要使用use_frameworks!,在需要使用的到地方 import AFNetworking
    3.swift 项目中通过pod导入OC项目
     1) 使用use_frameworks,在桥接文件里加上#import "AFNetworking/AFNetworking.h"
     2)不使用frameworks,桥接文件加上 #import "AFNetworking.h"



    展开全文
  • ...在OC使用Swift 1.首先创建一个工程名字就叫做CHWTest1 2.在工程的Build Setting中把Defines Module改为YES,如图 3.把Product Name设为工程的名字,如图 4

    转自:http://m.blog.csdn.net/article/details?id=47100535



    一.在OC中使用Swift

    1.首先创建一个工程名字就叫做CHWTest1

    2.在工程的Build Setting中把Defines Module改为YES,如图


    3.把Product Name设为工程的名字,如图


    4.在你的OC文件中导入ProjectName-Swift.h(这个 ProjectName-Swift.h是系统自动创建的,不要手动去创建,ProjectName是你的工程得名字,这里就是CHWTest1


    这时候编译会报错,因为并没有Swift文件

    5.创建Swift文件


    这里创建一个Swift的类,语言选择为Swift,然后会提示你,是不是创建一个OC的桥接头文件,这里选择YES,创建完之后,你的工程里是这样的

    是的,你会发现你的工程中多了个 PrductName-Bridging-Header.h的一个文件,这个的作用就是OC和Swift的桥接,里面有这样一句话

     Use this file to import your target's public headers that you would like to expose to Swift.意思就是,在这里面你个以导入类,以供你的Swift使用,这里面我的例子是OC-Swift-OC三个类之间的push,具体代码如下




    然后push的效果就出来了,如图


    OK,到这里,OC中使用Swift就已经结束,不难吧!

    二,如何在Swift中使用OC

    Swift中使用OC文件和上面差不多,只是需要几步

    1.创建一个Swift工程,这里面就叫做CHWTest2

    2.Swift代码引用OC,需依靠 Objective-C bridging header 将相关文件暴露给Swift,创建 Objective-C bridging header 有两种方法:

    (1)当你在Swift项目中尝试创建OC文件时,系统会自动帮你创建 Objective-C bridging header,如下




    此时除了 .h 、.m 文件之外,会额外多出一个叫做 项目工程名-Bridging-Header.h 的文件,这个文件中导入的类是可以暴露给Swift看到的。你要做的,只是#import XXXX.


    这个步骤和上面是差不多的,另外一种方式就是

    (2)自己创建 Objective-C-bridging-header这个桥接文件

    File > New > File > (iOS or OS X) > Source > Header File切记,名字 一定要 是 项目工程名-Bridging-Header.然后还有一步,在项目的 Build Settings选项里,要确保Swift Compiler 选项里有这个 Bridging Header 文件的设置,路径必须指向文件本身,而不是目录!


    这里,Swift中就可以使用OC文件了!


    展开全文
  • OC调用Swift方法

    2018-05-02 15:36:48
    第一步:创建桥接文件第二步:配置桥接文件第三步:创建pch文件并配置其路径 第四步:在pch文件中导入如下头文件,注意:...,这里的xxx就是第二步中的Module name, 注意不要写错了 第五步:OC中直接调用Swift...

    第一步:创建桥接文件


    第二步:配置桥接文件




    第三步:创建pch文件并配置其路径

     

    第四步:在pch文件中导入如下头文件,注意:import "xxx-Swift.h",这里的xxx就是第二步中的Module name, 注意不要写错了

     

    第五步:OC中直接调用Swift



    展开全文
  • iOS oc 调用 swift

    2019-07-03 07:14:24
    如股票oc要调用swift里面的代码 需要包含固定这个头文件 项目名称 LiqunSwiftDemo-Swift.h ...LiqunSwiftDemo-Swift 点进去 可以看到 所有的swift代码 都产生了 对应的一个 oc的类 也就是 编译过程...
  • 1.由于接触的swfit一些教程,所以准备在已有的OC里面使用swift,按照教程,没问题,但是我在原来的OC中使用swift,怎么也编译不通过, 开始的时候报错,提示找不到各种类,后来仔细发现,原来不可以在同一个项目中...
  • iOS 马甲包制作+垃圾OCSwift代码生成脚本 文章目录iOS 马甲包制作+垃圾OCSwift代码生成脚本一、马甲包介绍1、什么是马甲包3、怎么制作马甲包二、OC垃圾代码生成脚本三、Swift垃圾代码生成脚本 一、马甲包介绍 ...
  • SwiftOC相互调

    2016-08-05 19:07:56
    在项目中不免会有多中语言开发, 不说别的就我个人而言, 之前一直都是用 OC 写的代码, 封装很多工具类, 而苹果新出来 Swift , 现在项目在向 Swift 过渡, 或者新项目是 Swift , 不想浪费时间用 Swift 封装工具类, 再说...
  • 今天在OC工程里面直接引入了一个第三方的Swift包,结果OC文件里面死活找不到Swift对象。打开 “工程名-swift.h”文件内容似乎是空的。(正常的文件应该会有很多OC方法,对象) 后来发现工程里面并没有”工程名-...
  • oc 项目倒入swift 代码的时候 pod 引入库,必须使用user_frameworks 新建swift 类,会自动创建 xxx-bridging-header,点击创建就ok 如果swift pod 库里面报错,直接更新就好了 引用swift类的时候 直接使用 #import ...
  • 虽然网上关于swiftoc混合编程的教程比较多,但是大多是基于 swift项目的,所以对咱们 OCer的参考价值有一定折扣. 现在swift虽然仍然存在很多缺陷,但是鉴于苹果的强势,是时候在项目中把简单的功能交给swift了,给...
  • OCSwift混合使用

    2017-07-11 09:13:02
    随着swift趋向于稳定,越来越多的公司启动的新项目也想使用swift过把瘾,使用swift的好处与弊端不再赘述。目前版本是swift3.0,而且Xcode9beta版中已经更新到swift4.0。使用swift开发是大趋势,这里从以下几个方面看...
  • OC项目中引入Swift

    2020-07-07 09:47:18
    OC项目中引入swift 首先在工程文件里面创建一个.swift文件,如果你之前没有创建过这时候会提示你创建一个桥接文件; kywy-Bridging-Header.h 备注:有的孩纸会没有提示,创建这个文件的。避免打乱节奏我在文章...
  • OCswift相互调用

    2017-04-26 11:39:33
    一、OC调用swift文件 二、swift调用OC文件 三、注意和总结 添加: 四、自定义桥接文件  一、OC调用swift文件  在OC项目中创建一个swift文件的时候,Xcode 会提示 需要创建一个桥接文件,点确定...
  • Swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,或者有一些第三方使用OC写的,没有swift版本,怎么办?那就使用混...
  • 最近在oc工程里要引用swiftMonkeypaws,需要使用oc调用swift技术,里面踩了很多坑,这里简单记录一下。 1、oc调用swift oc调用swift其实很简单,google一下就有很多的教程,可以参考文章1、2、3、4。总体上就是在要...
  • OC 项目中使用基于 Swift 的 CocoaPods 库 随着 Swift 的流行,各种神奇的库也开始有对应的 Swift 版本了,而其中一些更神奇的库却只有 Swift 版本… 正巧接手了一个前人用 Swift 写的项目,里面有一个...
  • 如何新建:一般情况,在Swift工程中新建一个OC类,或者在OC工程新建一个Swift类,系统就会提示你是否创建,选择是就行了,然后再删除你刚刚创建的无用文件。如下图(在OC工程中创建的): 如果你选择了取消,可能下一...
  • 首先在项目中,为了保障工作的稳定性,使用混合式开发室最好的选择(前提是自己能够看得懂自己写的代码)。一、首先说一下调用的问题:OC->SwiftOC调用Swift) 首先配置一下环境:如图 1、Build Settings->...
  • 正好这两天加了一个swift学习群想继续学习swift,发现好多swift初学者,在混编这块还不是很清楚,当初自己初学的时候也经历了这么一个痛苦的过程,所以把自己的痛苦过程也写一下。当然这也是第一次写文章,想想有点...
1 2 3 4 5 ... 20
收藏数 4,879
精华内容 1,951
关键字:

oc里面使用swift代码