2018-01-25 17:10:09 kangpengpeng1 阅读数 3544
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2904 人正在学习 去看看 任苹蜻

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时关于这句话是否要加上的浅显原因(其实深入的东西就需要接着百度了)

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



2018-04-27 22:49:29 xiaoxiaocode 阅读数 1454
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2904 人正在学习 去看看 任苹蜻

在swift开发过程中我们难免会使用一些OC的开源库来附注项目开发。这就涉及到OC和swift的混编了,正好本人最近也在模仿斗鱼直播的项目,自己也使用了OC的第三方库,今天就给大家介绍一下自己的使用过程。

一、导入第三方库

这里需要注意点,我使用pod导入OC的第三方库SDCycleScrollView,然后进行配置出现找不到SDCycleScrollView的错误,最后还是直接复制SDCycleScrollView到项目中才解决的问题,这一点还不知道为什么,希望清楚的这个问题的同学指正。

二、创建头文件

创建一个头文件,然后将SDCycleScrollView.h文件导入到头文件中。
创建头文件
导入头文件

三、配置桥接头文件

在Build Setting里面搜索bridging,然后向Objective-C Bridging Header中添加我们创建的头文件的地址,如下图:
配置头文件

四、使用OC方法

还是使用swift的方法调用就可以。

 let imageNames = ["1.png", "2.png", "3.png", "4.png","5.png"]
        let cycleScrollView = SDCycleScrollView.init(frame: CGRect (x: 0, y: 0, width: self.view.frame.size.width, height: 200), shouldInfiniteLoop: true, imageNamesGroup: imageNames)
        cycleScrollView?.delegate = self
        self.view.addSubview(cycleScrollView!)

五、OC代理方法的使用

第三方的方法会自动转成swift的方法,所以只要还是使用swift的方法调用就可以啦!

/*
 1、按照swift的代理执行方式来就可以。
 */
extension RecommendVC : SDCycleScrollViewDelegate{
    //图片滚动回调
    func cycleScrollView(_ cycleScrollView: SDCycleScrollView!, didScrollTo index: Int) {
        print("图片滚动回调\(index)")
    }
    //点击图片回调
    func cycleScrollView(_ cycleScrollView: SDCycleScrollView!, didSelectItemAt index: Int) {
        print("点击图片回调\(index)")
    }
}

2017-07-28 11:23:20 shifang07 阅读数 905
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2904 人正在学习 去看看 任苹蜻

1.swift工程 使用pod

   有了OC中使用pod管理第三方库的经验,在swift中使用pod来管理第三方库就很容易了。

第一步:cd的工程文件夹下

第二步:pod init 为项目创建一个PodFile文件

第三步:在工程中双击PodFile文件,编辑 pod 'Alamofire' 后,保存关闭。

第四步:pod install成功后即可。

platform :ios, "8.0"
use_frameworks!
这就告诉了CocoaPods--你的项目使用的是iOS 8.0,并且将使用框架来代替静态库。

use_frameworks!

A、用cocoapods导入swift框架 swift项目和OC项目都必须要 use_frameworks!

B、使用 dynamic frameworks,必须要在Podfile文件中添加 use_frameworks!

use_frameworks! -> dynamic frameworks方式 -> .framework 

#use_frameworks! -> static libraries方式 -> .a

总结:

1)用swift项目考虑到会使用 OC swift两种第三方框架,所以Podfile中使用swift项目默认的 use_frameworks!更为妥当,并且frameworks动态链接库具有一定的优势。 

2)可以建立一个Bridge头文件,用来import那些OC框架的.h文件:#import "xxx/xxx.h"。或者不建头文件,像swift框架一样,直接在需要用到的swift文件中import


参考:https://segmentfault.com/a/1190000007076865


2.必备第三方库

Alamofire,AFN swift 版本

Kingfisher,类似于SDImage的一个swift 一个轻量的下载和缓存网络图片库

AlamofireImage,基于 Alamofire的网络图片组件库

SwiftyJSON,数据解析的swift

CryptoSwift,swift加密库,支持md5,sha1,sha224,sha256...

AlamofireObjectMapper,将Alamofire JSON响应数据转为swift对象

Aspects,swift面向切面编程(AOP)库Method Swizzling

RxAlamofire,Alamofire提供函数响应式调用接口以优雅的方式使用Alamofire进行网络请求

PromiseKit异步编程类库提供了很多实用的异步函数 让异步编程更简单

EZSwiftExtensions, Swift标准库 Foundation UIKit 提供了很多高级扩展函数

有:NSObject/Bool/Int/Double/String/NSAttritedString/Array/Dictioanry/NSDate/NSTimer/CGRect/UIViewController/UIView/UITextView/UILabel/UIImageView/UIImage/Block Objects/UIDevice/NSUserDefauts/NSURL/EZ function and variables






3.常用第三库:




2018-08-02 11:35:06 Summer_via 阅读数 948
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2904 人正在学习 去看看 任苹蜻

由于最近开发一个项目,需要用到百度地图API,于是使用pod添加了百度地图的库,podfile如下:

# Uncomment the next line to define a global platform for your project
# platform :ios, '11.4'

target 'BaiduLocTest' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!

  # Pods for BaiduLocTest
 pod 'BMKLocationKit','1.2.1'
 pod 'BaiduMapKit','4.1.1'
 pod 'SnapKit','~>4.0.0'
  target 'BaiduLocTestTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'BaiduLocTestUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

新建桥接文件-配置桥接文件路径-import头文件,报错:找不到头文件,如下图:
这里写图片描述
文件目录的确是有对应的头文件的。
于是找到百度地图的demo看了一下,发现import头文件的前缀不是BaiduMapKit,而是BaiduMapAPI_XXX。打开pods/BaiduMapKit才发现里面出了头文件还有一个framework文件夹,而里面放的就是编译出来的.framework文件,文件名正好对应前缀。于是找到要用头文件所属framework,用framework名作前缀就没问题了。

2019-04-14 18:17:03 songbai1211 阅读数 35
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2904 人正在学习 去看看 任苹蜻

oc 项目倒入swift 代码的时候

  1. pod 引入库,必须使用user_frameworks
  2. 新建swift 类,会自动创建 xxx-bridging-header,点击创建就ok
  3. 如果swift pod 库里面报错,直接更新就好了
  4. 引用swift类的时候 直接使用 #import "xxx-Swift.h",xxx是工程名称,不能直接使用#import “xxxswiftVC .h”这种类名,会报错,

swift调用第三方oc库

阅读数 1060

没有更多推荐了,返回首页