• 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一下。

    展开全文
  • 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写的第三方库,下面整理下OC项目如何使用Swift库 1.在已有的OC工程新建一个Swift文件,命名为Test.swift,会弹出提示,选择Create Bridging Header建立桥接文件,系统会建立...

    OC项目引入Swift方法

    在OC项目中,有可能会遇到需要引入Swift写的第三方库,下面整理下OC项目如何使用Swift库

    1.在已有的OC工程中新建一个Swift文件,命名为Test.swift,会弹出提示,选择Create Bridging Header建立桥接文件,系统会建立“工程名-Bridging-Header.h”




















    2. 配置工程

    设置Defines Module 为Yes


    设置Product Module Name 为当前工程名 (有时系统会自动为我们设置好)


    此时系统会为工程创建一个“工程名-Swift.h”的文件(不会显示出来,可以引用),此文件不可手动创建,必须使用系统创建的

    3.测试是否成功

    新建一个Swift文件,写一个Swift的函数

    import UIKit
    
    class Test1: NSObject {
    
        func show()
        {
            print("hello baby!")
        }
    }

    在OC工程里调用该函数


    成功!

    以后在使用的地方直接引用"工程名-Swift.h",不需要引用Swift文件














    展开全文
  • 上篇讲了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混编C++,C等简单些,毕竟OC和...OC类中可以引入Swift语言写的类,同样,Swift类中也可以引入OC语言写的类,这点首先我们得毋庸置疑! 1.OC引入Swift: 2.Swift中引入OC

    说起这个话题,在我看来,比项目中的OC混编C++,C等简单些,毕竟OC和Swift都是苹果自己的开发语言,API什么的都一样,还是更容易混合开发些,好了,废话不多说,切正题,OC与Swift怎么混和开发呢?OC类中可以引入Swift语言写的类,同样,Swift类中也可以引入OC语言写的类,这点首先我们得毋庸置疑!

    1.OC中引入Swift:

    1.创建一个OC的工程


    2.创建一个swift类


    3.点击next之后会出现下边这个


    4.点击创建这个桥,Xcode就会自动生成一个隐藏的文件,名字为“ProductName-Swift.h”;还有一个文件是一个桥接头文件,名字为“ProductName-Bridging-header.h”


    5.我们可以点开上边的“ProductName-Swift.h”,看看里边会有什么?


    6.我们会发觉里边全是用OC写的,已经把Swift语言成功得转化为了OC,好强大!!!所以就能用了啊,我们试着调用下看看:


    7.成功调起了Swift语言写的一个controller。

    2.Swift中引入OC:

    在Swift中引入OC,前边的创建类的过程我就不多赘述了,只看不一样的,刚我们在上边不是说有一个“ProductName-Bridging-Header.h”是不是还没用到,对的,现在就要用了,我们知道的,Swift是没有.h头文件的,但是OC是有头文件的,所以就有一个桥,看下图:


    对的,就是把Swift需要用的OC的类的头文件写到这个“ProductName-Bridging-Header.h”即可,就可调起来,我们试试看:


    come on,成功调起!!!

    就是这样了,自己跟着写一下就OK了


    Hope To Help You!

    展开全文
  • 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 ...
  • OC项目中引入Swift

    2020-07-07 09:47:18
    OC项目中引入swift 首先在工程文件里面创建一个.swift文件,如果你之前没有创建过这时候会提示你创建一个桥接文件; kywy-Bridging-Header.h 备注:有的孩纸会没有提示,创建这个文件的。避免打乱节奏我在文章...
  • 原有的项目都是使用OC写的,既然要在原有项目中引入swift文件首先就要实现OC和swift的混编设置。 混编设置: 在OC项目创建一个swift文件的时候首先Xcode会弹出一个提示框: 这时我们要选择“Create ...
  • 今天研究了一下如何在OC项目使用swift文件,即OCswift的混编问题,发现在OC中要使用swift文件也是蛮简单的,实践过程列如下: 1)首先随便创建了一个OC项目,就叫 DetialViewDemo 2)因为Swift的代码默认是...
  • 最新一些学妹问起,所以抽点时间来写的,适合入门级别的swift 与 OC 混编 的程序猿。 本文章将从两个方向分别介绍 OC 与 swift 混编 ... 1.2 如何在swift中实现oc的代理方法  1.3 如何在swift中实现oc的Block回调 2
  • ...在OC中使用Swift 1.首先创建一个工程名字就叫做CHWTest1 2.在工程的Build Setting把Defines Module改为YES,如图 3.把Product Name设为工程的名字,如图 4
  • 1首先需要将 always embed swift standard libraries 设置 为yes,如上图2然后设置SWIF语言的版本,如下图
  • oc中调用swift中的struct

    2016-09-05 10:26:53
    oc中调用swift中的struct  在oc中是不能调用struct里面的内容的,你想在类似class前面加个@objc的方法加在struct前面,你是发现是不行的,那但是我们又想在oc中调用struct的属性,那怎么办呢?我们只能够再建一...
  • OC和Swift之间的互调很简单,iOS8以后官方给出了这两种语言之间的桥接方案,简单说...应用较多的主要是在Swift中调用OC类,使得在最新的swift工程中仍然能够兼容使用以前的OC类库等。 这里通过一个简单的例子展示在Sw
  • 虽然网上关于swiftoc混合编程的教程比较多,但是大多是基于 swift项目的,所以对咱们 OCer的参考价值有一定折扣. 现在swift虽然仍然存在很多缺陷,但是鉴于苹果的强势,是时候在项目把简单的功能交给swift了,给...
  • 1、我们先创建一个OC的项目MyFirstOCUseSwiftDemo 2、我们点击Target看到右边选择Build Settings,把Defines Module改为YES, 3、我们回到工程目录下,New File一个Swift File,起名为MyFristSwift,此时会...
  • 本文章将从两个方向分别... 1 如何在swift的类中使用oc类 1.2 如何在swift中实现oc的代理方法 1.3 如何在swift中实现oc的Block回调 2 二个方向从OC工程中引入swift类    2.1 如何在OC类中使用swift类 2.2 如何...
  • OCswift相互调用

    2017-04-26 11:39:33
     在OC项目创建一个swift文件的时候,Xcode 会提示 需要创建一个桥接文件,点确定创建桥接文件,Xcode会自动创建一个桥接文件 名字:工程名-Bridging-Header.h 这个桥接文件是 swift
  • swift导入oc第三方库

    2019-05-05 15:31:39
    对于ios开发而言,目前很多第三方库或者demo还是以oc为主,swift相关的资料很少,这篇文章就结合博主的开发实例对在swift工程导入并使用oc版本的第三方库进行阐述。 正文 1.编写oc桥接头文件 顾名思义,将oc编写的...
1 2 3 4 5 ... 20
收藏数 3,218
精华内容 1,287