[IOS]Swift使用SVGKit的记录,iossvgkit

现在入门IOS开发走OC还是SWIFT?

如果只是搭班车,学swift效率。如果想深入,个人觉得还是要先学OC的,否则即使iOS8正式发布,很多第三方库还是OC写的,没有跟进,这时候需要你读懂和操作。虽然OC现在看起来学习成本和最终目的太不相称。
 

最近打算使用swift和SVGkit做一个app,遇到了好多状况,对于初学者的几个概念,一个是静态库,第二个是…

这个文件是系统帮我们自动生成的一个转换文件,我们要暴露的文件,系统都已经帮我们自动转换后储存在这个文件内,很强大,有么有!!!

这里选择Create Bridging
Header,如果不选的话,那就自己手动创建,然后指定索引位置

[IOS]Swift使用SVGKit的记录,iossvgkit

最近打算使用swift和SVGkit做一个app,遇到了好多状况,对于初学者的几个概念,一个是静态库,第二个是oc和swift混编,第三个是xcode6b4的类库不齐全.

更新了,

首先是SVGKit的GitHub的地址

好了接下来我们按照正常的swift创建我们的项目,然后我们按照我们的GitHub的要求(Build
the static
library),这里我就不翻译了其实很简单的,创建了我们的静态库.a文件以及usr文件夹,这里注意一定要按照GitHub上的选择“Debug-universal”的文件夹里面的文件,否则会出错,选择iphone或者模拟器的文件都不能够完整的运作。做完GitHUb的步骤,这里另外要注意
我的Xcode6b4的类库不完整类似CoreText都没有,后来更新到了Xcode6beta5才正常了,这里建议大家都更新到最新的Xcode6beta5。

第三个步骤是关于我们的oc与swift混编了,这个网上也有,我这里贴出截图和代码来给大家看一下。

新建一个.h 的文件作为“桥梁” 

图片 1

 

我命名为OCHeader.h然后 我们到 build setting里面进行设置

图片 2

 

然后,我们在这个OCHeader.h设置我们要导入的一些类

#ifndef svgtest_OCHeader_h
#define svgtest_OCHeader_h
#import "SVGKit.h"             //这就是我要添加的SVGKit的类,方便我的swift直接调用
#import "SVGKImage.h"  //同上

#endif

 

一次添加全局的swift都可以直接使用,

然后我在我的ViewControler中写我们的代码把

我先设置了一个button让其点击后加载我的svg格式的文件,svg格式的文件事先导入到了我的项目。

import UIKit

//cnblog里面没有swift 将就一下用了c的模板 代码里面对比了oc的例子指导代码,我们可以看到很多不同点。
class ViewController: UIViewController {

    @IBOutlet var firstview: UIView!

    @IBAction func showsvgbuttonclic(sender: AnyObject) {
        var svgim:SVGKImage=SVGKImage(named: "Rsimplified.svg")
        //SVGKImage* newImage = [SVGKImage imageNamed:@"myImage.svg"];


        var svgimview=SVGKLayeredImageView(SVGKImage: svgim)
        //SVGKImageView* imageView = [[SVGKLayeredImageView alloc] initWithImage:newImage];

        firstview.addSubview(svgimview)
        //[self.view addSubView:  [[SVGKLayeredImageView alloc] initWithImage:newImage];
        NSLog("showsvgbuttonclick")



    }

 

建立完成,会看到默认生成的一个  xxx.h 和  Info.plist  文件(只看红框内)。

这样就可以cocoapods管理OC第三方库,swift第三方库手动管理,实现不同第三方框架的调用.

有了swift学习ios开发还有必要学习objectivec

swift才推出,不会太快弃用obj-c的。obj-c有一套完善的api,现在近期或1-2年内做项目还是必然用obj-c。swift现在的只是用来玩玩而已。苹果官方给出的建议就是,主项目还是用obj-c写,swift用来开发插件之类的。
 

六、暴露文件给外部使用

图片 3define
module.png

前提就是:在打包的时候,你已经把这个文件
添加到Public里了,并且申明了public属性,否则是找不到该文件的。

图片 4Alamofire项目源码

理论上:

下面手动导入Alamofire作为例子:

方法2:

本文将详细介绍一下OC和swift混编问题,其中涉及两大部分:1)oc项目中混编swift的实现;
2)oc或者swift第三库的导入及使用.

红框4:引入的第三方,pod管理

翻译过来就是:如果你想使用swift或者动态库,就把下面一行注释打开然而打开后你是编译不过去的,这时需要手动导入swift库

此外:如果项目都是纯swift文件(没有混编使用oc文件),这里xxx.h文件只需要导入第三方头文件即可(如果有使用第三方,没有的话基本什么都不用做)。

第三步中如果没有创建桥接文件的话,手动创建一个桥接文件,然后build setting
中搜索 Objective-C Bridging Header,将你手动创建的桥接文件路径输入进去

图片 5

在oc项目中想要使用swift,并且实现相互调用,需要一些基本的设置,桥接文件也是必须得.

我们可以通过这个文件来实现两者之间的转换,前提就是必须先将oc的.h暴露出来,否则即使你import,也会报错找不到.h
文件。

在bulid setting中找到 Packaging 下的 define
module,将是否定义模块布尔值改成YES,这样OC就可以支持swift了.

==================================报错3:==================================

图片 6导入oc类图片 7使用oc中的类图片 8oc中调用swift文件

图片 9

可以删除多余的不需要的文件,比如Example文件夹,等等

详细内容有点多:

图片 10使用swift或者动态库使用use_frameworks

解决办法:

桥接文件可以在你创建swift文件的时候Xcode自动生成,也可以自己手动创建,手动创建也就是一个头文件.这里需要说明一点的是,在oc项目中创建的swift文件必须都要继承自NSObject基类,而你自己想要创建的一些类可以这样来创建:

PS:如果没有引用第三方,这里只需要本类库包即可。

图片 113.png图片 124.png

resourceRooturl是xib、storyboard文件前缀路径。

如果你的项目用cocoapods来管理你使用的第三方库,并且OC项目中已经集成了多个第三方库,那么这时你想在导入swift编写的第三方库,这时你不能用cocoapods管理第三方库了,因为Swift连接时不支持静态库,cocoapods也在其Podfile中有说明:

-之前做的App,使用Swift框架语言,混合编程,内含少部分OC代码。

现在基本上可以实现swift调用oc中代码了,首先在桥接文件中导入你想在swift中用到的oc类

图片 13

图片 14桥接文件设置

图片 15

图片 16拖到自己项目中图片 17Embedded
Binaries中添加Alamofire.framework

2、将需要暴露的swift文件的访问权限申明为public属性。

图片 181.png图片 192.png

=======================这里解释一下,xxx.h文件为什么要这样做:=================

解释一下这两个文件:

红框3:添加的资源文件

红框内就是最终我们得到的Framework包。

5、由于我们自己的工程都有自己的第三方库引用,这里如果发现两者之间有冲突或重复引用,解决如下:

五、文件都基本添加完毕,可以尝试build一下了

1⃣️xxx.h
文件的作用是整个包对外提供的入口头文件,除了正常定义参数属性之外,还有

对于方法1,这样做是无效的,我们可以新建一个bundle文件,将图片移植过来。

引用集成时遇到的坑:

2、新建Framework文件夹,拷贝之前所有的framework包到文件夹内。

我们只需要把一个文件import即可,而不需要把每一个需要使用的swift文件import。

a:如果pod引用内,没有标注use_frameworks!    我们先加上这句话,并pod
update,目地是保持两边引用的第三方类库都是Framework类型。

4、由于我的类库包是基于swift建立的,这里oc使用的话,必须设置一个属性:

这个路径怎么来的呢?

(这里有个问题,如果oc文件过多,这里需要暴露的就很多,而这里太多的话,一个是不美观,第二是后面项目引用本类库都是能看到这些文件的。所以,能不能通过一个文件,来装载这些所有文件,达到只需要一个文件暴露就行的效果,如果有人实现了,欢迎指导一下,不甚感激。)

比如:我的登录页面
 login.swift文件暴露给外部,需要提供入口,我们使用的时候,是不需要import
login.swift的,即使你想import,也会发现找不到!!

所以我们使用的时候,头部只需要import一个文件,下面使用的时候,该使用哪个类就使用哪个类。

==================================报错1:==================================

注意:工程如果有桥接文件,是不能拷贝过来的,否则编译不通过。

如图:

==================================报错4:==================================

参考我这篇博文

发表评论

电子邮件地址不会被公开。 必填项已用*标注