Swift 开源项目精选 - 应用架构角度

基于Swift 开源项目精选导图,以应用架构角度出发继续甄选并“精分”。筛选、介定方法更偏重于构建应用时,项目在分类中起到的作用权重,可持续性权重,并部分算上开发者影响力。尝试持续地完善一份不那么杂乱无章(也许还比较好用)的 Swift 开源子集。内容将依然以导图和 myMindNode 形式呈现(持续更新中……)

myMindNode浏览及导图原文档下载……

附:MindNode 格式导图导出的文本内容(浏览 PDF 版本


Learning & Advanced

<algorithms> raywenderlich/swift-algorithm-club ➟ Swift Playgrounds

Swift 算法俱乐部,最全、最活跃,最具学习价值的算法库。

<useful Swift snippets> elizabethsiegle/30-seconds-of-swift-code ➟ Swift Playgrounds

精选的 30 秒或更短时间即能理解的实用 Swift 代码片段。(高效学习 swift 语言语法利器。思路来源于 知名 JavaScript 项目 github.com/30-seconds/…

<video series & programming> pointfreeco/episode-code-samples ➟ Swift Playgrounds

专注于学习 Swift 编程的视频聊天系列。

<livestreams, videos and sessions> insidegui/WWDC ➟ macOS

WWDC 现场、视频及相关资源汇集应用(非官方)

<ARCL framework> ProjectDent/ARKit-CoreLocation ➟ iOS

AR 与 GPS 精确数据的结合,开始一次导航之旅。非常重要的实验性项目,未来开发前景可期。

<Swift for Tensorflow> tensorflow/swift ➟ macOS | Linux

集成使用 TensorFlow 专用版 Swift

……

Developer Tools

XCTest

<testing framework> Quick/Quick & Quick/Nimble ➟ iOS | macOS

单元测试框架库

<snapshot testing> pointfreeco/swift-snapshot-testing ➟ iOS | macOS

通过快照记录方式进行自动化测试。非常直观方便的一种方式。

<code generator> mac-cain13/R.swift ➟ macOS

常用资源(images,fonts, ,colors 等)通过更易用的强类型方式在 Xcode 编辑器输入并自动转换。

<Code Diagnostics> realm/SwiftLint ➟ macOS

Realm 采用 Swift 编写的基于 GitHub's Swift Style Guide 规则的检查及转换工具。除了命令行运行方式,也提供集成 Xcode 的方法。对于新团队,这样的工具可以自动约束大家遵循编程规范。

<design & prototype> IBAnimatable/IBAnimatable ➟ iOS | macOS

IBAnimatable 是一个帮助我们在 Interface Builder 和 Swift Playground 里面设计 UI, 交互, 导航模式, 换场和动画的开源库。 github.com/IBAnimatabl…

<App Store Connect API> AvdLee/appstoreconnect-swift-sdk ➟ macOS

“借助 App Store Connect API 实现工作流程自动化”,这个库是对整套工作流程 Swift 版的易用化封装。 REST API:https://developer.apple.com/documentati… APP STORE CONNECT 使用入门(官方中、英、日文版)help.apple.com/app-store-c…

Package Manager

<Package Manager> apple/swift-package-manager ➟ macOS

苹果官方 Swift 包管理

<dependency manager> Carthage/Carthage ➟ macOS

简单,去中心化库依赖管理框架。 入门指南:www.raywenderlich.com/416-carthag…

<Git Hooks> orta/Komondor ➟ macOS

在 Swift 项目中支持 Git hooks。 配置实例:github.com/orta/Komond…

Programming Framework ➟ iOS | macOS | watchOS | Linux

<Reactive Programming> ReactiveX/RxSwift

简单、高效,活泼的函数反应式编程框架。
何为反应式编程?面向数据流和变化传播(时间和事件非代码顺序)的编程范式。

<Promises> mxcl/PromiseKit

Promise 的 Swift 实现类库,简化异步编程代码实现。 RxSwift vs PromiseKit blog.dianqk.org/2016/08/22/…

<state management> ReSwift/ReSwift

该框架主要针对单页面应用状态及单向数据流管理。

……

Server ➟ macOS | Linux

<web framework> vapor/vapor

最活跃的 Web 服务器框架。
推荐理由:纯 Swift 开发,引导开发者采用简洁、干净的 Swift 语法。
主要缺点:牺牲部分性能换取未使用 C 语言基础库为代价

Vapor, Perfect, Kitura 比较:www.jianshu.com/p/a9ca47e84…

<web framework> PerfectlySoft/Perfect

功能更强大,性能更好的 Web 服务器框架。有完整的中文开发文档支持。
github.com/PerfectlySo…

<web framework and HTTP server> IBM-Swift/Kitura

与 IBM Bluemix 最佳云集成,功能强大的 Web 服务器框架。CGI 支持。

<Swift on ARM + Docker> helje5/dockSwiftOnARM ➟ Shell

将 Swift 编译运行于 ARM 平台 Docker 上。

……

Application ➟ iOS | macOS | watchOS

App Services

Cache

  • <cache> hyperoslo/Cache ➟ iOS | macOS | watchOS

    多类型数据混合缓存库。

  • <UserDefaults wrapper> radex/SwiftyUserDefaults ➟ iOS | macOS

    轻量级数据存储类 NSUserDefaults 扩展类,它使类型数据访问和存储更为便捷、直观。

Social API

  • <facebook SDK> facebook/facebook-sdk-swift ➟ iOS

  • <Twitter SDK> twitter/twitter-kit-ios ➟ iOS

editor

  • <integration with your app> coteditor/CotEditor ➟ macOS

    轻量,但功能一点也不轻量的 App Store 上架的开源文本编辑器(几乎支持所有主流格式语法高亮显示,且可以扩展及自定义)

Markdown

  • <cmark> iwasrobbed/Down ➟ iOS | macOS

    集成调用 cmark 的高性能 Markdown 渲染实现库及演示。支持多种输出式(Web View, HTML, XML, LaTeX 等)也许是性能外加可用性最高的一个版本了。

  • <WKWebView> keitaoouchi/MarkdownView ➟ iOS

    Markdown 文档预览视图组件。

  • <WKWebView> tophat/RichTextView ➟ iOS

    兼具主流格式解析(LaTeX, HTML, Markdown)及简单视频嵌入(YouTube/Vimeo)功能富文本浏览视图。

ePub

  • <reader & framework for ePub> FolioReader/FolioReaderKit ➟ iOS

    ePub 阅读器及解析框架类库。这个很震撼,开发者还同步提供 Android 版。

Database & Client

  • <mobile database> realm/realm-cocoa ➟ iOS | macOS | watchOS

    可以匹敌甚至替代 Core Data 和 SQLite 的移动数据库。

  • <sync Realm with CloudKit> caiyue1993/IceCream ➟ iOS | macOS | watchOS

    用 CloudKit 同步 Realm 数据库工具库。

FileProvider & CloudKit

  • <files> nvzqz/FileKit ➟ iOS | macOS | watchOS

    简单、接口友好的文件管理类库。

  • <local file, iCloud & remote> amosavian/FileProvider ➟ iOS | macOS

    提供了一套完整、实用,接口统一的本地及远程文件管理封装器实现 Local, iCloud and Remote (WebDAV/FTP/Dropbox/OneDrive)。

Core ML

  • <utilities> hollance/CoreMLHelpers ➟ iOS

    一些输入/输出类型转换和扩展,以便于更容易地去使用 CoreML 。

  • <running trained-model Inception-v3> hollance/Inception-CoreML ➟ iOS

    Inception-v3 运行在 CoreML 框架内

  • <using Watson Visual Recognition> watson-developer-cloud/visual-recognition-coreml ➟ iOS

    来自 IBM Watson 的视觉识别及机器学习示例。 使用 Watson Swift SDK 管理和执行定制的训练模型。

  • <trained using CreateML> lovoo/NSFWDetector ➟ iOS

    用 CoreML 扫描、过滤不雅图片。

System

Networking

  • <HTTP networking> Alamofire/Alamofire ➟ iOS | watchOS | macOS

    著名的 AFNetworking 络基础库 Swift 语言版。

  • <network abstraction layer> Moya/Moya ➟ iOS | watchOS | macOS

    为你提供一套干净的网络抽象层,以以区隔底层网络库。

  • <Apple Reachability replacement> ashleymills/Reachability.swift ➟ iOS | macOS

    检测网络连通性实用工具库。

  • <WebSocket client> daltoniam/Starscream ➟ iOS | macOS

    WebSocket 标准(RFC 6455)客户端库 Swift 实现。

<RxSwift + Bluetooth> Polidea/RxBluetoothKit ➟ iOS | macOS

基于 RxSwift 框架的蓝牙库。

<LocalAuthentication> rushisangani/BiometricAuthentication ➟ iOS | macOS

针对 Face ID 和 Touch ID 更简洁地封装使用。

Graphics and Games

ARKit

  • <usable practices> simformsolutions/ARKit2.0-Prototype ➟ iOS

    AR 2.0 实现效果原型演示

  • <ARKit + GPS data> ProjectDent/ARKit-CoreLocation ➟ iOS

    AR 与 GPS 精确数据的结合,开始一次导航之旅。其中包括了 ARKit + CoreLocation 框架库 ARCL,它是非常重要的实验性项目,未来开发前景可期。

  • <referenced cases> olucurious/Awesome-ARKit ➟ iOS

    AR 开源项目汇总列表。

Core Graphics

  • <image processing> gavinbunney/Toucan ➟ iOS | macOS

    小而美的图片变换及处理类。

  • <size of PNG, GIF, JPEG, BMP> malcommac/ImageSizeFetcher ➟ iOS | macOS | watchOS

    通过 URL 获取图像类型或尺寸。

  • <dominant & prominent colors> jathu/UIImageColors ➟ iOS

    图片色系决定界面背景色及字体显示颜色。获取主色、次色、背景色、详细色

Image I/O

  • <parse & play GIF> kaishin/gifu ➟ iOS

    高性能 GIF 显示类库

  • <parse & play APNG> onevcat/APNGKit ➟ iOS

    解析和显示 APNG 的框架

  • <play GIF & APNG> wangjwchn/AImage ➟ iOS

    GIF/APNG 播放引擎。

  • <SVG parser> mchoe/SwiftSVG ➟ iOS | macOS

    支持多种接口绘制 SVG 类库。

UIKit & AppKit

View and Controls

  • <Form> xmartlabs/Eureka ➟ iOS

    “由XMARTLABS精心编写,是XLForm的Swift版本。”github.com/xmartlabs/E…

  • <folding paper card> Ramotion/folding-cell ➟ iOS

    自然流畅、清新的单元格可折叠视图及演示库。

  • <Image> onevcat/Kingfisher ➟ iOS | macOS

    轻量级下载、缓存网络图像视图库。

  • <Charts> danielgindi/Charts ➟ iOS | macOS

    Android 图表开源库 MPAndroidChart 的 Swift 版。相当于在 Apple 的跨平台版本。

  • <modal segue> SwiftKickMobile/SwiftMessages ➟ iOS

    高可定制信息弹窗组件

  • <Calendar> patchthecode/JTAppleCalendar ➟ iOS

    功能强大、高可定制日历组件。

  • <UILabel morphing> lexrus/LTMorphingLabel ➟ iOS

    特赞的文字飘入飘出效果。

  • <skeleton loading> Juanpe/SkeletonView ➟ iOS

    等待加载信息前,预先优雅的显示内容骨架。

  • <UITextFields> raulriera/TextFieldEffects ➟ iOS

    定制的不同风格 UITextFields 输入框。

  • <UINavigationController> andreamazz/AMScrollingNavbar ➟ iOS

    可滚动的(显示或隐藏 UINavigationBar

View Layout

  • <Autolayout> SnapKit/SnapKit ➟ iOS | macOS

    自动布局 DSL 框架库。 snapkit.io/docs/

Animations

  • <animations framework> timdonnelly/Advance ➟ iOS | macOS

    一款高阶仿真动画框架库。

  • <animations> MengTo/Spring ➟ iOS

    精简版动画库(并附动画功能展示和调试功能)。

  • <loading & animations> ninjaprox/NVActivityIndicatorView ➟ iOS

    酷炫的装载动画库及演示。满足你对装载动画的个性化需求。

  • <transition> HeroTransitions/Hero ➟ iOS

    类似于 Keynote 的 Magic Move 的 transition 库。极为易用、支持自动布局。

  • <transition> marcosgriselli/ViewAnimator ➟ iOS

    简单的代码实现复杂 UI 布局及动画切换。

IoT ➟ Ubuntu | Raspain

<Swift on ARM devices> uraimo/buildSwiftOnARM ➟ Shell

<hardward projects> uraimo/SwiftyGPIO ➟ Linux

通过 Swift 语言去控制基于 Linux/ARM 主板(比如:C.H.I.P. 和 树莓派) 的 GPIO(General Purpose Input Output ),去完成简单的工控功能(比如 LED 灯的显示)。

……

Foundation ➟ iOS | macOS | watchOS | Linux

Utility

<extensions> SwifterSwift/SwifterSwift

一套超过 500 个本地库扩展的生产力工具库。

<JSON parser> SwiftyJSON/SwiftyJSON

GitHub 上最为开发者认可的 JSON 解析库。

<JSON parser & object mapping> tristanhimmelman/ObjectMapper

简介:对象与JSON互转实用类库。 推荐理由:面向对象模型,易于开发集成。有更完善的与 Alamofire 的集成方案。

<Date> malcommac/SwiftDate

几乎涵盖了已知开源日期类库所有优秀特性

<file paths> kylef/PathKit

极易用的文件路径操作类库

Security

<cryptographic algorithms> krzyzanowskim/CryptoSwift

Crypto 算法及相关功能类库集合

<Keychain Services wrapper> kishikawakatsumi/KeychainAccess

钥匙串存储管理封装

Database & Client

<SQLite> stephencelis/SQLite.swift

简单、轻量,使用上最 SQL 的 SQLite 封装库。

Networking Framework

<event-driven network framework> apple/swift-nio

事件驱动网络应用框架。

<SwiftNIO-based server-side> amzn/smoke-framework

事件驱动网络应用框架。

GitHub

<GitHub client API> nerdishbynature/octokit.swift

同时支持 GitHub 和 GitHub 企业版 Swift API 客户端类库。

Cognitive Computing

<IBM Watson> watson-developer-cloud/swift-sdk ➟ iOS | Linux

让开发者在自己的应用内快速应用 IBM Watson Cognitive Computing 服务。

……

Database Server

(cross platform)

➟ Shell

<Realm Platform> realm/realm-object-server

Realm 平台目标实现可交互的移动数据库

……

iCloud & Remote

(iCloud, On-drive, Dropbox, Webdav, ftp/ftps, Samba...)

IBM Watson Services

(AI)

TensorFlow

(pre-trained model)

<TensorFlow to CoreML Converter> tf-coreml/tf-coreml ➟ Python

Caffe

(Neural networks model)


整理过程中八卦过的两位传奇人物:

  1. GitHub 上曾经最具影响力的 iOS 独立博主及开发者 Mattt 就曾于 2015年加入苹果后,几乎消声匿迹(无论在其个人网站、博客、 GitHub 社区还是 Twitter 都少有活动,原因又鲜为人知)。很多不太了解开发者多诧异他怎么了?大部分人都是在 Mattt 本人在 Twitter 上于2018年3月再次发声后,才知道他过去三年原来一直为苹果工作(做为一位资深技术作者为 The Swift Programming Language,Swift Package Manager 和 swift.org 等写开发文档)。并且,回归社区后的活跃度显示爆发式增加,并开辟了一个新的领域( Swift 基础教育系列课程项目 Flight School)。当然,奠定其“江湖”地位的几款知名开源项目的后续,也基本不用担心未来发展。
  1. 此外,Swift “教父” Chris Lattner 于 2016 年下半年后在开源社区贡献大幅度减少,自从 2017年初闪电离职苹果公司,短暂加入特斯拉担任自动驾驶(Tesla Autopilot)项目软件副总裁,由于工作性质变更,Swift 及 开源社区贡献更加稀少。可喜的是不到六个月后即又离职特斯拉,并迅速加入了谷歌大脑(Google Brain)项目组,负责推动 TensorFlow 平台开发者体验及接入Swift 语言基础构架工作等工作后,逐渐恢复了开源社区活跃度及贡献。目前看来,他不会轻易地撒手不管 Swift 语言的发展、建设。这一点对于热衷于 iOS 开发和开源项目的同学们都是很大的鼓舞。 坦率地讲,以上内容只是在整理过程中,闲着无聊顺便“八卦”解闷,也可以认为纯粹凑字数。?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Swifter-Swift 开发者必备 Tips (第四版),王巍版本 柯里化 (Currying) Swift 里可以将方法进行柯里化 (Currying),这是也就是把接受多个参数的方法进行一些变形,使其更加灵活的方法。函数式的编程思想贯穿于 Swift 中,而函数的柯里化正是这门语言函数式特点的重要表现。 举个例子,下面的函数简单地将输入的数字加 1: func addOne(num: Int) -> Int { return num + 1 } 这个函数所表达的内容非常有限,如果我们之后还需要一个将输入数字加 2,或者加 3 的函数,可能不得不类似地去定义返回为 num + 2 或者 num + 3 的版本。有没有更通用的方法呢?我们其实可以定义一个通用的函数,它将接受需要与输入数字相加的数,并返回一个函数。返回的函数将接受输入数字本身,然后进行操作: func addTo(_ adder: Int) -> (Int) -> Int { return { num in return num + adder } } 有了 addTo,我们现在就能轻易写出像是 addOne 或者 addTwo 这样的函数了: let addTwo = addTo(2) // addTwo: Int -> Int let result = addTwo(6) // result = 8 再举一个例子,我们可以创建一个比较大小的函数: func greaterThan(_ comparer: Int) -> (Int) -> Bool { return { $0 > comparer } } let greaterThan10 = greaterThan(10); greaterThan10(13) // => true greaterThan10(9) // => false 柯里化是一种量产相似方法的好办法,可以通过柯里化一个方法模板来避免写出很多重复代码,也方便了今后维护。 举一个实际应用时候的例子,在 Selector 一节中,我们提到了在 Swift 中 Selector 只能使用字符串在生成。这面临一个很严重的问题,就是难以重构,并且无法在编译期间进行检查,其实这是十分危险的行为。但是 target-action 又是 Cocoa 中如此重要的一种设计模式,无论如何我们都想安全地使用的话,应该怎么办呢?一种可能的解决方式就是利用方法的柯里化。Ole Begemann 在这篇帖子里提到了一种很好封装,这为我们如何借助柯里化,安全地改造和利用 target-action 提供了不少思路。 protocol TargetAction { func performAction() } struct TargetActionWrapper: TargetAction { weak var target: T? let action: (T) -> () -> () func performAction() -> () { if let t = target { action(t)() } } } enum ControlEvent { case TouchUpInside case ValueChanged // ... } class Control { var actions = [ControlEvent: TargetAction]() func setTarget(target: T, action: @escaping (T) -> () -> (), controlEvent: ControlEvent) { actions[controlEvent] = TargetActionWrapper( target: target, action: action) } func removeTargetForControlEvent(controlEvent: ControlEvent) { actions[controlEvent] = nil } func performActionForControlEvent(controlEvent: ControlEvent) { actions[controlEvent]?.performAction() } } 模式匹配 在之前的正则表达式中,我们实现了 =~ 操作符来完成简单的正则匹配。虽然在 Swift 中没有内置的正则表达式支持,但是一个和正则匹配有些相似的特性其实是内置于 Swift 中的,那就是模式匹配。 当然,从概念上来说正则匹配只是模式匹配的一个子集,但是在 Swift 里现在的模式匹配还很初级,也很简单,只能支持最简单的相等匹配和范围匹配。在 Swift 中,使用 ~= 来表示模式匹配的操作符。如果我们看看 API 的话,可以看到这个操作符有下面几种版本: func ~=(a: T, b: T) -> Bool func ~=(lhs: _OptionalNilComparisonType, rhs: T?) -> Bool func ~=(pattern: I, value: I.Bound) -> Bool 从上至下在操作符左右两边分别接收可以判等的类型,可以与 nil 比较的类型,以及一个范围输入和某个特定值,返回值很明了,都是是否匹配成功的 Bool 值。你是否有想起些什么呢..没错,就是 Swift 中非常强大的 switch,我们来看看 switch 的几种常见用法吧: 可以判等的类型的判断 let password = "akfuv(3" switch password { case "akfuv(3": print("密码通过") default: print("验证失败") } 对 Optional 的判断 let num: Int? = nil switch num { case nil: print("没值") default: print("\(num!)") } 对范围的判断 let x = 0.5 switch x { case -1.0...1.0: print("区间内") default: print("区间外") } 这并不是巧合。没错,Swift 的 switch 就是使用了 ~= 操作符进行模式匹配,case 指定的模式作为左参数输入,而等待匹配的被 switch 的元素作为操作符的右侧参数。只不过这个调用是由 Swift 隐式地完成的。于是我们可以发挥想象的地方就很多了,比如在 switch 中做 case 判断的时候,我们完全可以使用我们自定义的模式匹配方法来进行判断,有时候这会让代码变得非常简洁,具有条理。我们只需要按照需求重载 ~= 操作符就行了,接下来我们通过一个使用正则表达式做匹配的例子加以说明。 首先我们要做的是重载 ~= 操作符,让它接受一个 NSRegularExpression 作为模式,去匹配输入的 String: func ~=(pattern: NSRegularExpression, input: String) -> Bool { return pattern.numberOfMatches(in: input, options: [], range: NSRange(location: 0, length: input.characters.count)) > 0 } 然后为了简便起见,我们再添加一个将字符串转换为 NSRegularExpression 的操作符 (当然也可以使用 StringLiteralConvertible,但是它不是这个 tip 的主题,在此就先不使用它了): prefix operator ~/ prefix func ~/(pattern: String) -> NSRegularExpression { return NSRegular[removed]pattern: pattern, options: nil, error: nil) } 现在,我们在 case 语句里使用正则表达式的话,就可以去匹配被 switch 的字符串了:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值