• 今天研究了一下如何在OC项目中使用swift文件,即OCswift的混编问题,发现在OC中要使用swift文件也是蛮简单的,实践过程列如下: 1)首先随便创建了一个OC项目,就叫 DetialViewDemo 2)因为Swift的代码默认是...

    最近在研究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开发,这绝对是苹果的未来啊!

    展开全文
  • ...在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文件了!


    展开全文
  • 上篇讲了Swift中使用OCSwift中使用OC,这篇讲下OC中使用Swift类。 在OC中需要用到Swift代码的文件中引入#import “XXX-Swift.h”,XXX是你的工程名称。 特别注意 1、被使用的Swift的类必须是至少继承自NSObject...

    Swift中引用OC看这篇
    在OC中需要用到Swift代码的文件中引入#import “XXX-Swift.h”,XXX是你的工程名称。

    特别注意
    1、被使用的Swift的类必须是至少继承自NSObject的,不然OC识别不了这个类。
    2、Swift中的属性和方法,要加上@objc标识,不然识别不了。

    代码如下,Swift中定义了一个类,这个类有一个类属性和一个类方法。

    class UUUU:NSObject {
        @objc static var yyy:String?
        @objc static func test()->(){
            print("XXXX")
        }
    }

    在OC需要用到的地方先引入#import “XXX-Swift.h”,然后就能用了

        UUUU *u  =[UUUU new];
        NSLog(@"%@" , UUUU.yyy);
        [UUUU test];

    Swift中使用类属性和类方法代替宏定义

    另外,在Swift的类中,可以使用只读的类属性和类方法来代替OC中的宏定义,这样定义的宏在OC中直接用,省略了在oc中再定义一次的麻烦。代码如下

    class UUUU:NSObject {
        //只读的类属性
        @objc static var name:String{
            return "jim"
        }
        //类方法
        @objc static func RGBColor(r:Float , g:Float , b:Float) -> UIColor {
            return UIColor.init(red: (CGFloat(r/255.0)), green: (CGFloat(r/255.0)), blue: (CGFloat(r/255.0)), alpha: 1.0)
        }
    }

    另一种Swift代替宏定义的方法是使用全局变量和全局函数来定义,Swift中使用全局变量和函数代替宏

    展开全文
  • 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"



    展开全文
  • 1、Charts的下载地址 2、解压后将文件夹全部复制到项目中去 3、在项目中添加Charts.xcodeproj ...6、在oc中使用swift,需要桥接文件,若是之前没有添加过swift文件,那么只要新建一个swift文件,

    1、Charts的下载地址
    2、解压后将文件夹全部复制到项目中去
    这里写图片描述

    3、在项目中添加Charts.xcodeproj
    这里写图片描述

    这里写图片描述

    4、添加依赖
    这里写图片描述

    这里写图片描述

    5、看下手动添加项目的流程
    这里写图片描述

    注意:Xcode8.2 之后,需要将“Always Embed Swift Standard Libraries”设置YES。

    这里写图片描述

    6、在oc中使用swift,需要桥接文件,若是之前没有添加过swift文件,那么只要新建一个swift文件,之后项目会提示是否需要添加,可以自动添加桥接文件

    这里写图片描述

    7、在桥接文件中导入头文件即可

    这里写图片描述

    注意:若是直接将Charts.xcodeproj拖拽到项目中,会经常出现,依赖找不到源文件,各种问题,需要先将整个文件夹复制到项目中,然后在添加Charts.xcodeproj

    展开全文
  • swift中使用OC的方法;在OC中调用swift方法
  • Swift项目中使用OC,在OC项目中使用Swift 几天前,我开始新的App的开发了。终于有机会把swift用在实战中了,也学到了之前纯学语法时没有机会获得的知识。 这篇博文中,我就如何使用swiftOC混编做一个...
  • OC项目中使用Swift

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

    2017-02-25 18:00:30
    oc中使用swift代码,只需要加入一个头文件即可。这个头文件是这么写的:#import <项目名-swift.h>· 例如我的项目: 我们点击进去这个头文件发现: 原来他把swift的头文件都放这这个头文件来,原来时这么做...
  • swift现在使用越来越多了,一些主流的框架或者效果比较好的demo都陆陆续续使用swift写了.所以,要学会如何在oc的项目调用swift. 这里主要借助一个桥梁文件,这个桥梁文件一般在你导入swift代码或者创建swift代码的...
  • 项目有这个需求,查看了很多资料,自己再Mark一下: 1、如果项目没有swift文件,需要创建一...3、在pods找到集成的swift三方库,在Build Settings搜索swift language version,改成三方库所支持的最高版本...
  • OC项目引入使用swift编写的三方库后,报错 错误描述:The “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift. This setting can be set ...
  • 碰到一个swift的项目,博主要用OC来进行...Swift中使用OC使用桥接文件,可以查看http://blog.csdn.net/codingfire/article/details/51880516在OC中使用Swift文件博主还真不知道,查了下,具体说明如下:假设我有一个类
  • iOS oc 调用 swift

    2019-07-03 07:14:24
    如股票oc要调用swift里面的代码 需要包含固定这个头文件 项目名称 LiqunSwiftDemo-Swift.h #ProjectName#-Swift.h 固定的写法 swift 目的 是取代oc 但是 不会完全取代 只是前端的替换 LiqunSwiftDemo-Swift 点...
  • OCSwift 的简单单例的创建方式...
  • OC调用Swift方法

    2018-05-02 15:36:48
    第一步:创建桥接文件第二步:配置桥接文件第三步:创建pch文件并配置其路径 第四步:在pch文件导入如下头文件,注意:...,这里的xxx就是第二步的Module name, 注意不要写错了 第五步:OC中直接调用Swift...
  • 一般我们在OCSwift混编的工程,如果在.m文件需要使用Swift的类的话,直接在相关的类前加上 @objcMembers 注解,然后在.m文件导入 “Project Name-Swift.h” 头文件 就好了 但是如果在要在.h 必须使用...
  • [Swift]1.在OC项目里的OC代码调用Swift方法,Swift代码里调用OC代码。2.在Swift项目里的Swift代码里调用OC代码,OC代码调用Swift方法。
  • oc中调用swift中的struct

    2016-09-05 10:26:53
    oc中调用swift中的struct  在oc中是不能调用struct里面的内容的,你想在类似class前面加个@objc的方法加在struct前面,你是发现是不行的,那但是我们又想在oc中调用struct的属性,那怎么办呢?我们只能够再建一...
1 2 3 4 5 ... 20
收藏数 19,885
精华内容 7,954
关键字:

oc中如何使用swift