oc 使用swift的框架_oc 如何使用swift框架 - 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该文件也会报错。

    展开全文
  • 项目中有这个需求,查看了很多资料,自己再Mark一下: 1、如果项目中没有swift文件,需要创建一...3、在pods中找到集成的swift三方库,在Build Settings中搜索swift language version,改成三方库所支持的最高版本...

    项目中有这个需求,查看了很多资料,自己再Mark一下:

    1、如果项目中没有swift文件,需要创建一个,名字随意,同时会让生成一个(项目名-Bridging-Header.h)的文件,一并生成

    2、cocoapod集成所需要的三方库到项目中

    3、在pods中找到集成的swift三方库,在Build Settings中搜索swift language version,改成三方库所支持的最高版本

    4、点击项目->targets->build settings 搜索module将
         1.enable modules
         2.link frameworks automatically
         两个设置成YES

    这样就大功告成

    如果想使用自己刚创建的Swift文件,可以在.pch文件中引用头文件#import "项目名-Swift.h"

    这个文件是系统自动创建好的,是隐藏的,可以直接引用,这样就可以在OC项目中使用刚创建的Swift文件了

    展开全文
  • OCSwift混编Pod引入第三方库的问题 问题描述:Swift应用OC 的开源框架,需要创建一个桥接头文件,问题就出在这个...1.为了在Swift项目中引入OC 开源框架,我使用了pod工具引入。然后下图: 2.之后创建桥

    OC和Swift混编Pod引入第三方库的问题

    问题描述:Swift应用OC 的开源框架,需要创建一个桥接头文件,问题就出在这个看似简单,却隐藏着一个巨大的问题:一切都按部就班的在桥接头文件中引入了OC 头文件,但是xcode总是报错找不到该文件。接下来详细描述问题和原因。

    1.为了在Swift项目中引入OC 开源框架,我使用了pod工具引入。然后下图:

    2.之后创建桥接文件:

    3.然后就是在配置文件中设置桥接文件路径:

    4.到这里就看似完成了,一切都很简单。但是,当编译时问题就来了,如下图:

    原因是找不到该文件。可是明明使用了pod工具引入了啊。(注:百度清一色的都是以上步骤,该问题并未在百度查询到问题原因和解决方案。所谓博客恐怕都是出自一人)

    5.在作了大量的测试和摸索后,终于得意解决。问题的根本原因就是我之前用pod引入了Swift开源框架,为了方便,在引入OC开源框架时我同样是使用了pod工具。我们回看第一步

    Swift框架:

    pod 'SnapKit''~> 0.30.0.beta1'

    pod 'Alamofire''~> 3.4.0'

    pod 'SwiftyJSON''~> 2.3.2'


    OC框架:

    pod 'SVProgressHUD'

    pod 'MJRefresh'

    同样还有一句话:

     use_frameworks!


    没错,简单的说,在OC开发时并不用使用该语句,但是Swift开发时使用pod工具就需要加上这句话。这就导致了OC 和 Swift公用同一个项目工程中的pod时造成了以上显示的错误,即使其他步骤都没有错,但是错误原因就是找不到文件。

    至于为什么会这样,我联想到了之前看到过的一篇文章好像是有这么一句话(记不太清楚了)OC是动态语言,而Swift是静态语言,这就是为什么两者在使用pod时关于这句话是否要加上的浅显原因(其实深入的东西就需要接着百度了)

    既然原因找到了,解决它就好办了,我们只要把这两种语言的开源框架分开管理就可以了。。。。



    展开全文
  • OCSwift混合使用

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

    随着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:文章有点啰嗦,本人系新手,主要是记录给自己看。

    展开全文
  • OCSwift混编(惊喜!)

    2015-05-12 20:30:25
    今天在和一位前辈交流的之后,使用OCSwift混编开发,遇到了一个让我忍不住要欢呼的情况,在这里,跟大家分享一下,也再次赞叹一下XCode的强大.OCSwift混编出现最多的就是在编写Swift代码的过程中使用OC框架了....
  • 一、首先说一下调用的问题:OC->SwiftOC调用Swift) 首先配置一下环境:如图 1、Build Settings->Packaging->Defines Module 设置为 Yes 2、在修改在 build setting 中的 Product Module
  • OC中调用Swift代码方法

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

    2017-08-30 13:29:01
    首先承认我落后了,到今天才开始在项目里用swift,而且还不是全部的用,只是ocswift混编,因为实在是进入项目的时候框架已经用oc搭好了啊啊啊啊啊。只能退而求其次,混编了,大致根据百度到的方法试了一下,不是很...
  • 首先就是在 targets->Build Setting ->Packaging 中设置 Defines Module为YES  然后创建swift文件时会生成"文件名-Bridging-Header.h"这样一个桥接文件 怎样使用cocoapods就不多... 因为swift使用的是框架而不是静态库
  • 项目下个版本开始用Swift编写,这涉及到OCSwift混编的问题。早podfile中写入use_frameworks! 再导入一个Swift第三方框架,运行项目发现AFN找不到了:把Swift的第三方和use_frameworks!去掉项目又可以运行了,首先...
  • 本文主要介绍如何在Swift项目中使用OC的文件以及在OC项目中使用Swift文件。
  • Swift调用OC第三方框架

    2017-08-31 10:07:50
    1.在项目中添加一个Briding-Header.h文件 2.在Xcode->Target-->ild settings--->objective-c Bridgin-Header中添加 项目名字/.h...3.在Briding-Header.h文件中添加你想使用的第三方框架 相关的头文件后就可以使用
  • OCSwift指南

    2020-03-10 00:01:09
    作者丨zhangferry来源丨iOS成长之路运行环境:Xcode 11.1 Swift5.0最近参与的一个项目需要从Objective-C(以下简称OC)转到Swift,期间遇到了一些...
  • 使用CocoaPods 0.36 管理swiftOC三方框架
  • @OC调用Swift 方法 OC调用传多值参数Swift方法的处理 截止目前, Swift 已经达到4.2版本。有很多优秀的Swift库。有时需要OCSwift混编。学习研究了一下FaceAware 人脸感知开源库。 Swift方法传多值参数及OC调用 ...
  • 首先,在项目中时常会使用OCSwift之间的混合调用,但是很多都会调用失败,也不知道如何调用,现在小编和大家分享一下如何混合使用OCSwift: 新建一个基于Swift的工程,在Swift里面调用OC; 1、新建一个 2...
  • OC 项目中使用基于 Swift 的 CocoaPods 库 随着 Swift 的流行,各种神奇的库也开始有对应的 Swift 版本了,而其中一些更神奇的库却只有 Swift 版本… 正巧接手了一个前人用 Swift 写的项目,里面有一个...
  • swift现在使用越来越多了,一些主流的框架或者效果比较好的demo都陆陆续续使用swift写了.所以,要学会如何在oc的项目中调用swift. 这里主要借助一个桥梁文件,这个桥梁文件一般在你导入swift代码或者创建swift代码的...
  • OCSwift的区别

    2018-01-03 16:52:58
    swift独有 1范围运算符 2 元组类型 3swift中定义常量用let定义变量用var 4if letguard let的用法 5Swift中的 和 6细节上的不同 7swift3 新增访问权限fileprivate 和 openswift独有1、范围运算符a...b 表示[a, b] ...
  • OCswift的相互调用

    2016-04-05 11:21:21
    1、 swift调用oc 将 Objective-C 导入 Swift  要在同一个 app target 中导入 Objective-C 文件供 Swift 使用,你需要依赖 Objective-C的 桥接头文件(Objective-C bridging header)来暴露...
1 2 3 4 5 ... 20
收藏数 4,989
精华内容 1,995
关键字:

oc 使用swift的框架