oc中使用swift 混合编程_swift oc 混合开发 - CSDN
  • 虽然网上关于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.运行

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

       


    展开全文
  • 就先简单的说说 Swift 与 Objective-C 的混合编程吧,先做一个简单的过度。 根据苹果官方文档的介绍。Swift就是对OC 的一个包装。所有的Swift底层,框架都是使用OC来实现的,所以呢,Swift 可以和Co

    学习Swift也有一段时间了,但一直以来都是主打OC语言在开发项目。在这里也对Swift这门语言做个笔记。方便自己也方便大家。现在先不说Swift具体的知识语法。就先简单的说说 Swift 与 Objective-C 的混合编程吧,先做一个简单的过度。


    根据苹果官方文档的介绍。Swift就是对OC 的一个包装。所有的Swift底层,框架都是使用OC来实现的,所以呢,Swift 可以和Cocoa ,OC 兼容调用。目前iOS的开发需要到很多的OC开发库。毕竟Swift刚起不久,还没有像OC那样多人用。Swift 通过和 OC 兼容调用。就可以在Swift的项目中大量使用 OC 函数,当然 OC也可以调用 Swift 代码。这样的话呢,Swift 与 OC 就可以相互调用了。


    一:OC 调用 Swift 代码

    OC 调用Swift中的方法。在OC工程中,如果创建的 Swift 类要在 OC 工程中使用,类必须继承于 NSObject 或者说用 @objc 来修饰这个类。例如:

    class  KFArr : NSObject{

    }

    或者

    @objc class KFArr{

    }


    1.定义一个 KFArr类的方法和下标,现在这里定义的这些函数会在OC中被调用。

    class KFArr :NSObject{

          var _arr = [String]();

          override init(){

          }

         init (bar : NSInteger){

            _arr = Array<String>(count :bar , repeatedValue: “ ”);

         }

         subscript (index:Int) ->String?{

            return  _arr[index];

           }

            func  getL() ->{

              return _arr.count;

            }

           func addE(eml : String){

             _arr.append[eml];

           }



    2. 在OC中调用KFArr对象

    我们在创建Swift代码时,Xcode会提示你要创建OC 与 Swift 的连接文件。这个不用管,直接点击创建就好了。


    #import  " OCToSwift-Swift.h "

    //测试OC调用Swift函数

    - (void)testOCToSwift{

          KFArr * arr = [[KFArr alloc]  init];

        //调用Swift中的方法

         [arr addE:"helloworld"];

         NSInteger length  =  [arr getL];

         NSString * eml  = [arr objectAtIndexedSubscript:0];

    }

    注意了:上面的OCToSwift-Swift.h就是在创建Swift类时Xcode自动产生的文件。这个文件里所有的Swift为了兼容OC产生 .h 的头文件,命名规范是:工程名-Swift.h




    二:Swift 调用 OC 代码

    如果项目采用Swift开发,必然需要调用各种稳定的第三方 OC 开源库。

    首先,创建一个Swift 工程(Swift2OC)。


    在改项目中创建一个 OC 的Preson 类,然后在 Swift 中调用该类。

    1.添加 Preson 类。

    在工程中新建一个 OC 的 Preson 类,注意选择Object-C 语言。在点击“finish” 后Xcode会提示你创建一个 Swift 与 OC 互相连接是文件。 如下图所示:


    直接点击 “Create.....  ”就好了。


    创建完成后, 这样就产生了一个中间的桥梁文件  Swift2OC-Bridging-Header.h 。如下图所示。



    2.在 OC 的Preson 类 Preson.h 中 。

    #import <Foundation/Foundation.h>

    @interface Preson : NSObject

    @property (nonatomic,assign)NSUInteger ID;

    @property (nonatomic,copy)NSString * name;

    - (id)initWithName:(NSString *)name;
    - (id)initWithID:(NSUInteger)ID andName:(NSString *)name;

    - (NSString *)getName;
    + (NSUInteger)maxPreson;

    @end

     


    3.在 OC 的Preson 类 Preson.m 中。

    #import "Preson.h"

    @implementation Preson

    - (id)initWithName:(NSString *)name{
        self = [super init];
        return self;
    }

    - (id) initWithID:(NSUInteger)ID andName:(NSString *)name{
        self = [super init];
        if (self) {
            self.name = name;
            self.ID = ID;
        }
        return self;
    }

    - (NSString *)getName{
        return self.name;
    }

    + (NSUInteger)maxPreson{
        return 50;
    }

    @end



    4. Swift2OC-Bridging-Header.h中的代码。

    #import "Preson.h"



    5.main.swift中的代码。

    import Foundation

    let p = Preson()
    let p2 = Preson(ID:50,andName:"广州KF科技")

    print("name = \(p2.getName())");
    print("maxPreson = \(Preson.maxPreson())");


    运行工程,执行上面的代码,会输出如下图所示的结果



    6. 设置 Swift 与 OC 的桥接文件

    这个文件的命名规则是  “工程名--Bridging-Header.h”。如果要改变默认的这个名字可以在工程中设置。如下图所示。


    好了。有关 Swift 与 OC 间的相互调用就到这里了。





    展开全文
  • OCSwift混合编程引用Pods管理的模块 用Pods安装需要使用的模块后,打开.xcworkspace文件,然后按下图所示设置一下User Header Search Paths: swift创建OC桥接文件 a. 自动创建桥接文件(仅限于swift工程...

    OC和Swift混合编程引用Pods管理的模块

    1. 用Pods安装需要使用的模块后,打开.xcworkspace文件,然后按下图所示设置一下User Header Search Paths:
      这里写图片描述
      这里写图片描述
    2. swift中创建OC桥接文件
      a. 自动创建桥接文件(仅限于swift工程中第一次建立OC文件),创建完桥接文件后还需要像b中最后一个图一样设置一下Object-C Bridging Header的路径:
      这里写图片描述
      这里写图片描述
      这里写图片描述
      这里写图片描述
      这里写图片描述

    b. 手动创建桥接文件并设置对应的参数
    在swift工程中新建一个.h文件,用于桥接
    这里写图片描述
    这里写图片描述

    然后就能愉快的调用OC中的模块了。
    这里写图片描述

    参考文章:
    http://www.jianshu.com/p/c399297f3869

    转载于:https://www.cnblogs.com/v-BigdoG-v/p/7398543.html

    展开全文
  • Xcode 7.1项目Objective-C和swift混合编程,文章的源代码。
  • 在iOS应用的开发Swift必将取代OC,两者...目前SwiftOC可以实现无缝的混合编程。  我这里会实现一个简单的Swift调用OC的iOS实例,实现过程是十分的简单的。就像我们所有的Hello World一样。具体操作步骤如下:

           在iOS应用的开发中,Swift必将取代OC,两者的趋势是“短期共存,长期取代”。但以前有太多的代码是用OC语言完成的,而Swift的开发也从 OC中继承了很多的特性,两者也是有很多的类似之处。目前Swift和OC可以实现无缝的混合编程。

           我这里会实现一个简单的Swift调用OC的iOS实例,实现过程是十分的简单的。就像我们所有的Hello World一样。具体操作步骤如下:

    (1)Xcode中新建一个iOS项目,语言选择Swift,设备选择iPhone.目录结构如下:


    (2)然后在该项目中右键New File,选择 Cocoa Touch Class,  输入类名,继承NSObject,语言选择Objective-c.选择Next后,第一次在Swift中创建OC类的时候,会弹出如下对话框,点击Yes即可:


    (3)创建完OC类之后,项目的目录结构如下:发现目录结构中多了三个文件,Hello.h,Hello.m分别是我创建的OC的类,等下会用Swift来进行调用,还有一个就是Bridging-Header.h,可以把这个理解为是OC和Swift之间桥接的文件。


    (4)然后在Bridging-Header.h,中引入OC类的头文件,代码为:#import "Hello.h"

    (5)然后在OC类中实现一个简单的方法,输出一条语句,先在Hello.h中进行声明:

    然后在Hello.m中使用OC语法实现该方法:


    (6)然后在Swift的类ViewController.swift的viewDidLoad()中调用OC的方法:


    (7)最后运行打印结果,

    .


          至此,Swift就能方便的调用OC的代码了。是不是很方便的。


    github主页:https://github.com/chenyufeng1991  。欢迎大家访问!

    展开全文
  • SwiftOC混合编程

    2015-07-13 11:27:41
    Swift和Objc混合编程注意是Swift中加入Oc代码,目前不能在Oc中加入Swift代码。新建项目后,然后新建Oc文件,语言选择Oc, 完成后弹出对话框,表达的意思是SwiftOc进行桥接。 选择Yes,如果选择了No,那么将不能...
  • Swift上调用OC封装好的一个model,里面有个枚举类型: typedef enum {  kCOManageCreater = 1, //创始人  kCOManageManager, //管理员  kCOManageNormal,  //普通用户 }kCOManagerType; 然后再s
  • swift oc 混合编程

    2017-05-06 18:04:03
    最近在学习Swift,写了一段时间之后感觉要比OC代码量少很多,而且简洁很多,但是基于目前公司大部分项目还是在使用OC开发,就涉及到OCSwift混合开发了,今天就自己这段时间了解的做个总结: 1.建立一个Swift...
  • 1新建类选择Swift 的时候, 会出现是否选择生成类似这样的头文件, 选择生成,(用于Swift类调用Oc的类使用的) 2 在Oc的类声明 工程的名字加上-Swift.h 类似 3 接下来进入下一个界面的方法就都一样啦。 ...
  • 有时候 ,我们会涉及到双向混合编程,特别是OCswift的互相引用。   swift调用oc的方法: 1、桥接文件,一般是swift工程,在创建一个oc文件时,系统自动添加(不用改名,直接默认即可) 2、将需要引用...
  • 最近项目中使用到了一个图表插件,由于这个图表插件使用swift写的,所以需要在项目中使用swift语言。 苹果推出swift语言也有一段时间,由于swift1.0中bug太多,一直没在项目中使用。写这篇文章的时间swift已经更新...
  • OCSwift混合编程,包含String参数;extraneous duplicate parameter name;'' already has a argument lable
  • SwiftOC,C++混合编程

    2020-07-30 23:32:22
    Swift,Objective-C,C++,混合编程
  • 1新建类选择Swift 的时候, 会出现是否选择生成类似这样的头文件, 选择生成,(用于Swift类调用Oc的类使用的) 2 在Oc的类声明 工程的名字加上-Swift.h 类似 3 接下来进入下一个界面的方法就都一样啦。 ...
  • 本文旨在帮助开发者快速从OC开发过渡到Swift开发,挑选了一些比较浅显的但是比较常用的Swift语法特性,在介绍的过程,通常会拿OC中的语言特性作比较,让大家更好的注意到Swift的不同。 另外需要说明的是,笔者也...
  • 在写cocos2dx引擎游戏时,试验了一下swift和c++的混编,swift可以与OC混编,C++可以和OC混编,那么是不是c++也可以调用swift的代码呢?...如题目所说,swift与C++混合编程,必定需要用OC作为一个中间接口,来衔
1 2 3 4 5 ... 20
收藏数 710
精华内容 284
关键字:

oc中使用swift 混合编程