美文网首页
App(Swift)开发常用的三方库

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

作者: lxyz22zp | 来源:发表于2017-10-23 15:38 被阅读52次

    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

    TextureTexture
    • 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

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

    • 一个例子

      HeroHero
      redView.heroID = "ironMan"
      blackView.heroID = "batMan"
      
      isHeroEnabled = true
      redView.heroID = "ironMan"
      blackView.heroID = "batMan"
      whiteView.heroModifiers = [.translate(y:100)]
      

    相关文章

      网友评论

          本文标题:App(Swift)开发常用的三方库

          本文链接:https://www.haomeiwen.com/subject/yxsauxtx.html