App(Swift)开发常用的三方库

Alamofire

Alamofire: Elegant Networking in Swift
  • Alamofire 是一款用Swift编写的HTTP 网络库,类似于OC里的AFNetWorking

  • 使用举例

    Alamofire.request("https://httpbin.org/get").responseJSON { response in
        print("Request: \(String(describing: response.request))")   // original url request
        print("Response: \(String(describing: response.response))") // http url response
        print("Result: \(response.result)")                         // response serialization result
    
        if let json = response.result.value {
            print("JSON: \(json)") // serialized json response
        }
    
        if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
            print("Data: \(utf8Text)") // original server data as UTF8 string
        }
    }
    

CryptoSwift

  • CryptoSwift 是使用Swift编写的一款用于加密的库,支持MD5 SHA1 SHA224 SHA256 SHA384 SHA512 SHA3 AES 等等,只用非常简单,支持iOS, macOS, AppleTV, watchOS, Linux 等平台

SwiftyJSON

  • SwiftyJSON

  • SwiftyJSON 让在Swift里使用JSON数据变得非常容易

  • 使用SwiftyJSON前后对比

    if let statusesArray = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [[String: Any]],
    let user = statusesArray[0]["user"] as? [String: Any],
    let username = user["name"] as? String {
    // Finally we got the username
    }
    
    let json = JSON(data: dataFromNetworking)
    if let userName = json[0]["user"]["name"].string {
     //Now you got your value
    } 
    
  • 一切都变得异常美好

Kingfisher

Kingfisher
  • Kingfisher 是一款轻量、纯Swift开发的图片加载库,现在是4.0版本,API方面相比之前有了挺大的改变,使用后感觉更为灵活了,对于学习Swift的思想有不错的学习价值。

    let url = URL(string: "url_of_your_image")
    imageView.kf.setImage(with: url)
    

SnapKit

SnapKit
  • SnapKit SnapKit是Masonry团队开发的Swift版本,对于习惯了使用Masonry开发的开发者来说SnapKit非常容易上手。

    import SnapKit
    
    class MyViewController: UIViewController {
    
    lazy var box = UIView()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        self.view.addSubview(box)
        box.snp.makeConstraints { (make) -> Void in
           make.width.height.equalTo(50)
           make.center.equalTo(self.view)
        }
    }
    
    }
    

Spring

  • Spring 是一款简化iOS UIView动画的第三方库,即使苹果在动画方面已经支持的非常好,但是在一些连贯的动画实现方面还有不少的不方便的地方,Spring极大的方便了实现一些复杂的组合动画。看个简单的例子

    layer.y = -50
    animateToNext {
       layer.animation = "fall"
       layer.animateTo()
    }
    

SwiftDate

<p align="center" >


SwiftDate

</p>

  • SwiftDate 项目开发里总避免不了日期的格式化、计算、转换、时间段等等,SwiftDate就是为了解决这些问题的
  • 可以简单的进行日期操作! 例如: aDate + 2.weeks + 1.hour or (1.year - 2.hours + 16.minutes).fromNow()
  • 非常方便的从 timezone, locale and calendar 进行转换. 使用这个工具类 DateInRegion 可以进行日期的转换!
  • 非常方便的进行日期比较 <,>,==,<=,>=. 例如, 你可以这么做 aDate1 >= aDate2 or aDate1.isIn(anotherDate,.day)
  • 非常简单的和日期组件. E.g. aDateInRegion.day or hour, minutes!
  • 其他一些简单的工具 (isYesterday,isTomorrow,isBefore()...)

IGListKit

Instagram


IGListKit
  • IGListKit 该库是Instagram的公司用于开发Instagram App使用的UI框架 是基于UICollectionView的一款数据驱动的UI编写框架,数据驱动也就是当我们写好UI代码后剩下的只需要关系数据的变化即可实现复杂的试图逻辑。

Texture

Texture
Texture
  • Texture 其实就是 AsyncDisplayKit Texture的基本单元是node,ASDisplayNode是UIView之上的抽象层,同时也是CALayer的抽象层。和只能被用在主线程的视图不同,nodes是线程安全的:你能并行的实例化并设置整个node层级,并且在后台线程里运行。

  • 用法和使用UIKit的组件用法差不多

    _imageView = [[UIImageView alloc] init];
    _imageView.image = [UIImage imageNamed:@"hello"];
    _imageView.frame = CGRectMake(10.0f, 10.0f, 40.0f, 40.0f);
    [self.view addSubview:_imageView];
    
    
    _imageNode = [[ASImageNode alloc] init];
    _imageNode.backgroundColor = [UIColor lightGrayColor];
    _imageNode.image = [UIImage imageNamed:@"hello"];
    _imageNode.frame = CGRectMake(10.0f, 10.0f, 40.0f, 40.0f);
    [self.view addSubview:_imageNode.view];
    
    

Moya

  • Moya 是一个高度抽象的网络库,他的理念是让你不用关心网络请求的底层的实现细节,只用定义你关心的业务。且Moya采用桥接和组合来进行封装(默认桥接了Alamofire),使得Moya非常好扩展,让你不用修改Moya源码就可以轻易定制。官方给出几个Moya主要优点:

  • 编译时检查API endpoint权限

  • 让你使用枚举定义各种不同Target, endpoints

  • 把stubs当做一等公民对待,因此测试超级简单。

    provider = MoyaProvider<GitHub>()
    provider.request(.zen) { result in
    switch result {
    case let .success(moyaResponse):
        let data = moyaResponse.data
        let statusCode = moyaResponse.statusCode
        // do something with the response data or statusCode
    case let .failure(error):
        // this means there was a network failure - either the request
        // wasn't sent (connectivity), or no response was received (server
        // timed out).  If the server responds with a 4xx or 5xx error, that
        // will be sent as a ".success"-ful response.
    }
    }
    
    

R.swift

  • R.swift 可以让你在开发种像安卓开发那样使用资源文件 R.image.settingsIcon(),是不是比用Swift的方式要赏心悦目的很多,这样做有很多好处,首先是避免了字符串拼写错误导致的问题太难被发现的问题,还有R.Swift可以在编译时检查那些文件是没有被用到的

    let icon = UIImage(named: "settings-icon")
    let font = UIFont(name: "San Francisco", size: 42)
    let viewController = CustomViewController(nibName: "CustomView", bundle: nil)
    let string = String(format: NSLocalizedString("welcome.withName", comment: ""), locale: NSLocale.current, "Arthur Dent")
    
    let icon = R.image.settingsIcon()
    let font = R.font.sanFrancisco(size: 42)
    let viewController = CustomViewController(nib: R.nib.customView)
    let string = R.string.localizable.welcomeWithName("Arthur Dent")
    

Hero

  • Hero
    Hero
  • Hero
    Hero
  • Hero
    Hero
  • Hero 是一款实现转场动画的库

  • 一个例子

    Hero
    Hero
    redView.heroID = "ironMan"
    blackView.heroID = "batMan"
    
    isHeroEnabled = true
    redView.heroID = "ironMan"
    blackView.heroID = "batMan"
    whiteView.heroModifiers = [.translate(y:100)]
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容

  • 转载自:https://github.com/Tim9Liu9/TimLiu-iOS[https://github...
    香橙柚子阅读 8,461评论 0 35
  • 我不知道,自己还在留恋什么 这里是否有我暖心的记忆 我不知道,自己还在等待什么 你们是否,会在清晨进入我的梦乡 我...
    浩宇_90阅读 323评论 5 4
  • 我想化作一阵风 来无影,去无踪 没有什么可以束缚我 谁也看不着我,谁也抓不住我 我想化作一阵风 去流浪,去飞翔 没...
    充满阳光的日子里阅读 108评论 0 0