oc代码 swift 里面用

2019-07-03 07:14:24 weixin_33862514 阅读数 533

如股票oc要调用swift里面的代码 需要包含固定这个头文件

项目名称 LiqunSwiftDemo-Swift.h

         #ProjectName#-Swift.h

固定的写法

swift 目的 是取代oc 但是 不会完全取代 只是前端的替换

LiqunSwiftDemo-Swift 点进去 可以看到 所有的swift代码 都产生了 对应的一个 oc的类

也就是 编译过程中 swift 先转换成 oc代码 再由oc代码转换成 c代码 (swift 在oc 之上 编译器前端的语法的转换 不涉及到编译器后端的转换)

 1,  #import <LiqunSwiftDemo-Swift.h>

 2,  写一个swift 类

import Foundation

class TestSwift : NSObject {
    override init() {//
        print("in init")
    }
    func someFunc(){
        print("in someFunc")
    }
    func getArrayByValue(v1:String ,v2:String) -> NSArray{
        return [v1 , v2]
    }   
}

 在oc 中调用

    TestSwift *ts = [[TestSwift alloc]init];

    [ts someFunc];

    NSArray * arr = [ts getArrayByValue:@"今天天气" v2:@"---没有雾霾"];

    for(NSString *str in arr){

        NSLog(@"str is %@",str);

    }

//结果

in init

in someFunc

2016-01-15 15:39:27.586 LiqunSwiftDemo[1776:117383] str is 今天天气

2016-01-15 15:39:31.346 LiqunSwiftDemo[1776:117383] str is ---没有雾霾

转载于:https://www.cnblogs.com/someonelikeyou/p/5133536.html

2017-08-10 13:40:37 qq_33298465 阅读数 4994

有时候 ,我们会涉及到双向混合编程,特别是OC和swift的互相引用。

 

swift调用oc的方法:

1、桥接文件,一般是swift工程,在创建一个oc文件时,系统自动添加(不用改名,直接默认即可)

2、将需要引用的oc文件 .h头文件 添加到桥接类中。

 

如下:

然后在swift调用处,直接就可以使用了。

 

oc调用swift的方法:

1、首先设置一下Packing

进入TARGETS ->Build Settings -> Packaging 中

设置Defines Module为YES

设置 Product Module Name (这个也可以不设置,直接使用默认就行)

如图:

 

 2、设置完之后,在需要引用的oc文件头部  import一下,格式为: #import "工程名-Swift.h"

      比如:#import "OrderSystem-Swift.h"

 

然后就可以使用swift文件了

 

对了,本文是基于swift创建的工程,两种情况分别对应正常的 swift引用oc文件,以及在oc文件内回头引用swift文件。

如果是基于oc创建的工程,暂未测试。

2016-08-04 22:40:59 chendehao001 阅读数 415

在项目中不免会有多中语言开发, 不说别的就我个人而言, 之前一直都是用 OC 写的代码, 封装很多工具类, 而苹果新出来 Swift , 现在项目在向 Swift 过渡, 或者新项目是 Swift , 暂时没有时间用 Swift 封装工具类, 但有想在 OC 中可以用 Swift 的代码, Swift 文件也可以用 OC 的代码, 此时我们只要通过响应的配置做好桥接即可在 Swift 和 OC 中相互使用对方的资源!!!

下面我就给大家分享 Swift 与 OC 相互调用的配置以及注意点!!!

建议收藏!!!

1. Swift 调用 OC

  • 创建桥接文件件—>xxxx.h
  • 在桥接文件中导入OC代码头文件
  • 配置桥接文件: 项目 ->buildSettings —> bridging —> 配置

创建桥接文件.png

配置桥接文件.png

桥接文件相对路径.png

在桥接文件中导入 OC 类头文件.png

在 Swift 文件中使用 OC 类.png


2. OC 调用 Swift

  • 项目名字不能随便起:
    • 不能有特殊符号(@ # $ % ^ ~ ! ? < > & - _ + , . " ' | \ { ( ) })
    • 也不能有中文
    • 最好纯英文(和数字), 以英文字母开头
  • Swift中的类/属性/法必须使 public修饰
  • 导入 项目名称-Swift.h

Swift中的类/属性/法必须使 public修饰.png

OC项目调用 Swift 文件.png


2017-07-10 11:16:59 polarGW 阅读数 869

随着swift趋向于稳定,越来越多的公司启动的新项目也想使用swift过把瘾,使用swift的好处与弊端不再赘述。目前版本是swift3.0,而且Xcode9beta版中已经更新到swift4.0。使用swift开发是大趋势,这里从以下几个方面看一下如何进行简单的配置。

  • OC中引用Swift文件
  • Swift中引用OC文件,以及第三方库
  • Xcode8以后编译swift2.x
  • OC引用Swift第三方库

一、OC中如何引用Swift文件:
首先先来创建一个object-c语言的项目,然后直接一个swift类,这时会弹出如下提示:
配置桥接头文件
先选择Do not Create,稍后会提到,系统会自动创建一个格式:xxx项目名-Swift.h的头文件,不显示但是可以直接引用,直接引用,这时发现报错了。
报错了
这是为什么呢?虽然一般情况下是直接引用xxx项目名-Swift.h,真正需要引用的是Product Moudle Name对应的文件名:
模块名配置
也可在此基础上搜索swift,对应的文件名正是想要的文件名,为什么上面还要提搜索pack找Product Moudle Name直接搜swift不就好了吗?因为这个名字是拼出来的:Product Moudle Name-Swift.h,可以去pack里面删除Product Moudle Name对应的内容,再回来搜swift看一下就明白了。
搜索swift
项目在创建的时候名称有的时候可能有歧义系统自动帮我们修改。swift在OC项目中是作为Moudle来使用的,名称继承自PROJECT下的Product Moudle Name,导入时报错请自行检查是否匹配。
目前为止导入头文件成功了,调用一下SwiftTest类中的log方法。
方法配置
却发现一直报未定义该类的错误:
未定义报错
点击生成的项目名-Swift.h的头文件里面却发现没有关于Swift声明:
未声明该类
后来经过查找发现是因为没有创建桥接文件导致的,手动来创建一下桥接文件,命名规则:项目名-Bridging-Header。
创建桥接文件
到项目里手动配置文件路径:
配置方法
配置完成后clean然后build点击项目名-Swift.h进入就可以发现定义swift类的声明,Command + R 运行成功。
二、Swift中引用OC文件,以及第三方库
swift引用OC文件比较简单:
1)创建桥接文件(参考上面步骤)
2)把需要用到类或者第三方SD、framework头文件引入
3)直接在swift文件中使用
由于比较简单不在赘述,稍后会提到注意事项。
三、Xcode8以后编译swift2.x以及pod引用的swift框架
Xcode8以后swift的currentVersion改为3.0,如果是swift2.x项目打开往往会有这样的提示:
转换提示
如果你想转换的直接点击convert,但是要注意备份小心一万点爆红,如果点击了later之后又想转换了可以进行如下操作:
手动转换
如果想要继续编译swift2.x需要设置版本:
设置版本
如果没有使用第三方框架那么现在就可以build了,而且是成功的,但是如果使用了第三方的framework,那么每个framework都需要设置一次,如下:
设置pod的版本
这里几点需要注意的:
1)pod里面的framework的版本必须与taget里面的一致否则编译失败。
2)必须与最低版本一致有一个framework使用了swift2.x其他都必须设置为YES
3)任何时候点击convertToCurrentVersion都是转换到最新版本也就是当前的swift3.0,即使你设置了使用以前版本再次进行转换也是转换到swift3.0不会转换到以前版本。
4)每次pod以后之前的配置都会重置,需要从新设置版本。但是可以在Podfile里面加入如下代码,将会对所有提交的framework进行设置:

post_install do |installer|
  installer.pods_project.targets.each do |target|
  target.build_configurations.each do |config|
  config.build_settings['SWIFT_VERSION'] = '3.0'
  end
 end
end

如下图:
pod设置
四、OC引用Swift的framework:
配置方法跟pod配置版本号方法相同,设置完版本号后在需要的文件中引用:#import <framework/framework-Swift.h>】也可以通过引入模块的方式:@import framework;这两种方式效果相同。
注意:很多swift三方库,并不支持OC使用,而绝大部分OC库支持swift,是向下兼容的,OC与Swift混编的注意事项,稍后补充。
ps:文章有点啰嗦,本人系新手,主要是记录给自己看。

2017-04-12 20:11:58 studying_ios 阅读数 5955

最近在研究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相互调用

阅读数 2370