2015-12-14 15:25:36 fegda 阅读数 4589

Swift使用第三方库MJExtension

首先先要感谢MJ老师,感谢他带来这么好用的第三方控件。

现在,进入正题,连续几个星期以来,我一直在网上搜寻Swift如何调用MJetension中得方法,来将Json字符串转换为模型对象。终于,黄天不负苦心人(其实是自己没有注意看),我在Github中得Issues中看到了其中他人询问的问题,看了一眼他是如何调用的,我一下子就明白过来该怎么调用OC中得方法。
比如,字典(json字符串)转模型,就是定义一个模型变量,通过模型变量去点出mj开头的使用方法。
例如:
    let model = Model()
    model.mj_setKeyValues(字典)
如此这般就可以把json数据导入到模型中了

补充:如果想要正常转换,需要在模型类型中继承至NSObject对象,否则无法将字典中得值导入到模型类中,并且会报错!


题外话:
    在获取转换后的数据时,是int类型的数据,会获取为空,但是只要在模型类中修改字段类型为NSNumber时,就可以获取到数值,不知道为什么?

小弟文笔不行,还望各位见谅。小弟我只是把自己的事物记录下来,方便自己,也顺便方便他人。顺便还请各位大神指点指点。
2017-07-28 11:23:20 shifang07 阅读数 922

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-04-10 14:20:56 ws_752958369 阅读数 2436

  随着Swift潮流声越来越近大,行业发展趋向于开源,逼着我们去学习更多知识。废话不多说,下面开始介绍如何以正确的姿势导入第三方库文件。

  学习过Objective-C的同学肯定会知道,一般会有三种方式导入第三方库,分别是:cocoasPod管理工具,打包成framwork导入,直接导入原文件。然而,swift是苹果在oc基础上研发的一种新语言且开源,当然也继承之前的优良传统。同样的也有三种方式。下面主要介绍导入源文件方式手动管理方式。

1.首先拖入第三方文件夹到工程目录下自定义文件夹下,如图分别导入了Alamofire,SnapKit,SDWebImage

2.如果导入的库swift编写那没什么,如果是oc编写,那么还需要生成一个oc-swift桥接文件,如上图Header.h(新建一个Header file)。

3.在headerFile中引入第三方库头文件,例如:#import "UIImageView+WebCache.h"

4.配置工程设置,Build Settings -> 搜索 Other Linker Flags 添加 "-Objc"

5.由于导入的头文件HeaderFile没有配置相对路径,编译时可能会报错。Build Setting -> Swift Compiler - Genneral -> Objective-C Bridging Header 在这里添加刚才添加的“头文件”路径,这里建议写相对路径,避免工程在另外一个电脑环境时候报错,找不到路径。用“$SRCROOT”表示当前工程的根目录,这里我直接放在根目录下,所以路径为 $SRCROOT/Header.h.

  到这里,所有的准备工作已经大功告成。开始疯狂的编码吧。

  下面是自动布局框架SnapKit的简单应用,写法类似于OC中masonry(同一个团队研发)。


2016-04-22 09:14:31 walkerwqp 阅读数 562
 分类:
 

目录(?)[+]

Swift项目引入第三方库的方法

转自

http://blog.shiqichan.com/How-To-Import-3rd-Lib-Into-Swift-Project/


以下,将创建一个Swift项目,然后引入3个库:

其中,前两个是Swift的库,SDWebImage是Objc的库。

源代码见:https://github.com/MarshalW/SwiftWith3rdLibDemo

项目跑起来是这个样子:

做下面步骤之前,需要让自己的项目是git项目。

使用Snappy库

Snappy库,用于简化AutoLayout布局的代码。

和Objc项目不同,Swift项目没有类似CocoaPods的库依赖工具,而是使用git的submodule引入库。目前来看更方便使用。

1. 创建submodule

在当前项目的目录下执行:

1
git submodule add https://github.com/Masonry/Snappy.git

执行完会看到多了个Snappy目录。

这样的项目,如果git共享给其他人,他们除了clone项目以外,还需要:

1
git submodule update --init --recursive

2. 将Snappy.xcodeproj加入到Xcode项目中

如下图所示,直接将文件拖拽过去即可:

3. 将Snappy.framework设置到项目中

Xcode打开项目的General,点击+

然后,选择Snappy.framework,加上它。

4. 编写代码测试

如果能正常import,Xcode不报错,就应该没有问题了:

1
import Snappy

写了个简单的代码运行也没有问题:

1
2
3
4
5
6
7
8
9
10
override func viewDidAppear(animated: Bool) {
println("super view: \(imageView.superview)")
let padding = UIEdgeInsetsMake(100, 100, 0, 0)
imageView.snp_makeConstraints { make in //autolayout
make.edges.equalTo(self.imageView.superview!).with.insets(padding)
return
}
}

使用SDWebImage库

SDWebImage库是Objc编写的。引入的方式和Swift有所不同(从第3步开始)。

1. 创建submodule

这一步还是省不了的:

1
git submodule add https://github.com/rs/SDWebImage.git

2. 将SDWebImage.xcodeproj加入到Xcode项目中

3. 设置Target Dependencies

在这里:

加入:

看起来是这样:

找到这里:

加入ImageIO.framework(iOS自带的),以及libSDWebImage.a

5. 设置Other Linker Flags

在这里设置-ObjC

设置完了的样子:

6. 创建Bridge头文件

就是创建一个普通的头文件,一般命名为项目名-Bridge-Header.h

7. 设置Bridge头文件

找到这里:

双击箭头标示的地方,会弹出文本框,将头文件加进去即可。

我开始的时候是参照stackoverflow的回答,将头文件直接拖拽进去,发现用的是绝对路径。可以在拖拽后修改一下:

引入第三方库的常见问题

目前主要碰到的问题是各个Swift第三方库Deployment Target版本不一致。比如Alamofire是8.0,而Snappy是7.0,需要让它们的版本是一致的。

会有类似这样的报错:

1
ld: embedded dylibs/frameworks are only supported on iOS 8.0 and later ...


2016-02-17 17:24:54 maindek 阅读数 1080

第一步:创建和配置Bridging-Header.h

Swift与OC进行混编,首先要有一个.h文件,这里使用Bridging-Header.h然后设置项目的Build Settings--Swift Compiler--Objective-C Bridging Header内容为DemoApp/Bridging-Header.h,这个与Bridging-Header.h位置有关,从项目的根目录开始在Objective-C Bridging Header选项里面写入Bridging-Header.h相对路径。


第二步:第三方项目依赖

对于第三方项目的依赖,一开始我打算用CocoaPods,但是过程曲折,最后一直报

[objc] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:14px;">ld: 218 duplicate symbols for architecture i386  
  2. clang: error: linker command failed with exit code 1 (use -v to see invocation)</span>  
我也没有办法了就把第三方项目源码拷贝到自己的项目里面,上图也可以看到我拷贝的事AFNetworking项目,然后在把源码加入到Build Phases--Compile Sources里面

第三步:修改Bridging-Header.h

在Bridging-Header.h中写入#import "AFNetworking.h"

第四步:调用OC

前面的工作做完后我们就可以调用第三方项目的功能了

[objc] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. //  
  2. //  ViewController.swift  
  3. //  DemoApp  
  4. //  
  5. //  Created by jiezhang on 14/10/24.  
  6. //  Copyright (c) 2014年 jiezhang. All rights reserved.  
  7. //  
  8.   
  9. import UIKit  
  10.   
  11. class ViewController: UIViewController {  
  12.   
  13.     @IBOutlet weak var weatherInfo: UITextView!  
  14.     override func viewDidLoad() {  
  15.         super.viewDidLoad()  
  16.         updateWeatherInfo()  
  17.     }  
  18.   
  19.     override func didReceiveMemoryWarning() {  
  20.         super.didReceiveMemoryWarning()  
  21.         // Dispose of any resources that can be recreated.  
  22.     }  
  23.   
  24.       
  25.     func updateWeatherInfo() {  
  26.         let manager = AFHTTPRequestOperationManager()  
  27.         let url = "http://api.openweathermap.org/data/2.5/weather"  
  28.         println(url)  
  29.         let params:NSDictionary = ["lat":"37.785834""lon":"-122.406417""cnt":0]  
  30.         println(params)  
  31.         manager.GET(url,  
  32.             parameters: params,  
  33.             success: { (operation: AFHTTPRequestOperation!,  
  34.                 responseObject: AnyObject!) in  
  35.                 self.weatherInfo.text = "JSON: " + responseObject.description!  
  36.             },  
  37.             failure: { (operation: AFHTTPRequestOperation!,  
  38.                 error: NSError!) in  
  39.                 self.weatherInfo.text = "Error: " + error.localizedDescription  
  40.                  
  41.         })  
  42.     }  
  43.   
  44. <p>}</p>  

第五步:运行界面


Swift 第三方库整理

阅读数 1390

Swift引入第三方库

阅读数 261

Swift 第三方库 - SnapKit

博文 来自: Seal_Shile
没有更多推荐了,返回首页