swift小提示框

2017-06-26 11:27:09 ZY_FlyWay 阅读数 9955

版本:Swift

github排名 https://github.com/trending,github搜索:https://github.com/search

主要工作说明: 
1. 将Swift从Objective-C混合的md文件中抽出(正在进行…)

使用方法:根据目录关键字搜索,记得包含@,以保证搜索目录关键字的唯一性。

问题反馈:请广大网友只按照目录结构(即使目录结构有问题)添加三方库,并pull request。目录问题大家提出issues后楼主会及时更改的。

目录

========

具体内容 =============================

========

Swift学习资料@

下拉刷新@

  • ZLSwiftRefresh - swift下拉刷新/上拉加载更多,支持自定义动画,集成简单,兼容UITableView/CollectionView/ScrollView/WebView。
  • BreakOutToRefresh - swift,上拉和下拉刷新。
  • GearRefreshControl - swift,上拉和下拉刷新。
  • refresher - swift,上拉和下拉刷新。
  • ReplaceAnimation.swift - 基于 @ZeeYoung欧阳哲 同学的创意下拉刷新动画实现。值得称赞还有额外增加了“取消及滚动”效果支持。
  • PullToReflesh-Swift - 一款炫酷的下拉刷新封装库(Mobile page refresh concept inspired by Google and for something like a news app)。源码分析 
  • pull-to-refresh.swift - 是一款非常易于开发者使用的下拉刷新和加载更多组件。通过一个 UIScrollView 的扩展,可以轻松为 UIScrollView 的所有子类添加下拉刷新功能。
模糊效果@
AutoLayout@
  • Snap - Snap是Masonry Auto Layout DSL的Swift版本,是一款轻量级的布局框架,使用了更良好的语法封装了AutoLayout。Snap支持iOS和OS X。
  • Neon.swift - 功能强大的 UI 布局神器。
  • EasyPeasy.swift - 编程方式自动布局框架库。
富文本@
  • RichEditorView - swift,一套可定制富文本编辑器组件及示例。功能完整、代码简练、实现逻辑巧妙(编辑器核心与 WebView 结合,采用 HTML5 contentEditable 编辑模式,执行JS 配套命令 execCommand 实现富文本编辑功能)。
  • SwiftyMarkdown.swift - 用swift写的markdown解析库。
  • Marklight.swift - Markdown 语法高亮显示编辑库(Swift)。
  • LTMorphingLabel - swift 能够实现文字变形动画效果的Label,用Swift写的一个能够实现文字变形动画效果的Label,很炫。
  • Splitflap.swift - 可用于快速给 iOS 应用创建文字翻转的动画效果。
  • FloatLabelFields.swift - FloatLabelFields.swift浮动标签输入效果类。
  • cleartext-mac.swift - 提供一千个常用单词的编辑器。
  • GlitchLabel.swift - 可定制“黑(故障)文字标签”类库,熟称晃瞎你的眼文字标签。
图表@
  • swift-linechart - 功能完整、实用的折线图组件。使用方便,参数配置简单。是不可多得的优质组件–swift。
  • ios-charts - 一款优秀 Android 图表开源库 MPAndroidChart 的 Swift 语言实现版(支持 Objective-C 和 Swift 调用)。缺省提供的示例代码为 Objective-C。
  • Scrollable-GraphView.swift - 灵动感十足的自适应、可定制滚动曲(折)线图表库。
表相关、TabbleView、Tabbar、即时聊天界面@
  • Eureka.swift - Eureka 是 XLForm 的 Swift 的移植版本, 一个可以帮助开发者们快速构建 iOS 各种复杂表单的库, 具有较高的可扩展性, 方便自定制样式。
  • HBHorizontalTableView - swift,TableView 横向滚动小示例(仿照 AppStore 应用展示)。
  • Chats - 聊天 UI 示例程序。此项目应该只为演示或学习之用,没有服务器 – swift。
  • Chatto.swift - Chatto.swift:轻量级聊天应用框架及示例。文字及图片可扩展输入栏,汽泡效果等聊天核心特性,分页及自动布局完善。
  • COBezierTableView - swift,通过编辑 Bezier 曲线四点位置设置 TableView 内 Cell 及对应按扭位置。实验效果很赞。
  • LxTabBarController - 改变了原生tabbar切换tab时的生硬效果,并加入滑动切换手势(有和界面上的其它手势发生冲突的风险,可根据具体项目予以关闭),swift版本
  • Sapporo - swift 单元格模型驱动的集合视图管理器组件。又一个超实用的“轮子”。
  • NavTopImage.swift - NavigationController动态缩放titleView。
  • paper-onboarding.swift - 漂亮的 material design 风格页面滑块。示例完整,易用。
  • Material.swift - 基于 Material Design 动画和图像框架库 (作者 Daniel Dahan)。
  • ReorderableGridView-Swift - 拖拽排序卡片。
  • ZYThumbnailTableView.swift - 可展开型预览TableView,开放接口,完全自由定制。实现教程
  • WHC_CollectionViewFramework.swift - 高仿支付宝可拖拽排序编辑动画效果cell的CollectionView集合视图。
  • SwipeViewController.swift - 一款好用的页面滑动和标签选项卡类库及示例。功能相当于 Objective-C 版 RKSwipeBetweenViewControllers。
  • TabDrawer.swift - 更适合单手操作的可定制 Tab Bar 组件库。P.S. 自动布局选择了 EasyPeasy。
  • SFFocusViewLayout.swift - UICollectionViewLayout实现的图片浏览器。
  • ESTabBarController.swift - 自定义TabBarController组件,继承自UITabBarControlle,可添加动画和自定义样式。swift 高度自定义TabBarController,支持自定义TabBarItem样式或添加动画
隐藏与显示@
HUD与Toast@
  • Toast-Swift - 高可定制易用的 Toast 弹出信息或通知用户界面组件类。
对话框@
  • SwiftyDrop - 轻量、易用的小清新弹出列表及信息提示组件真心不错。
  • PCLBlurEffectAlert.swift - 细节定制较丰富的弹出警报窗口组件。
  • GSAlert.swftt - 苹果在iOS8推出了全新的UIAlertController,旧的UIAlertView和UIActionSheet渐渐被废弃,但如果你仍然支持iOS7系统,你将不得不写两套代码。GSAlert解决了这个问题。
  • TKSwarmAlert.swift - TKSwarmAlert.swift:模仿 Swarm app 的 Alert 提醒框动画工具。
  • PMAlertController.Swift - 可定制弹窗组件替代官版不可定制的 UIAlertController。
  • TBActionSheet.swift - 支持Carthage,可自定义度100%的 ActionSheet,支持微信样式。
状态栏@
导航栏@
设置@
Switch@
日历@
  • FSCalendar 一个包含objective-c和Swift版本的优秀的日历
其他UI@
  • KDCircularProgress - KDCircularProgress是使用swift制作的色彩炫丽的进度条,可以加入多种颜色来控制进度条的渐变效果。
  • RandomColorSwift - 一个自动生成好看的颜色的 Swift 库,RandomColorSwift。
  • Hue.Swift - Hue.Swift:颜色常规功能集于一身的定义、使用 Color 工具类库(含图片取色)。
  • KtColor.swift - 利用 Swift 的语法特性简化创建 UIColor对象的过程。具体文章可以参考博客:当UIColor遇上 Swift
  • YPDropMenuViewDemo.swift - 一款DropMenu,menuView,类似之前美团的下拉菜单,支持swift2.2,因为用到iOS8.的毛玻璃。所以想支持到iOS8.0,支持自定义,支持等宽排列,支持从左向右排列。
  • ZMaterialDesignUIButton - Swift Material Design UIButton。
  • Twinkle - 为字体加上钻石版闪耀的效果。使用Swift编写。
  • Persei - 非常赞 动画隐藏或显示顶部菜单支持库及示例项目。–swift
  • DateRangePicker.swift - 可能是目前最好的 OS X 日期选择器,高扩展性,界面风格看起来很舒服,不过注意,是 OS X 开发专用。
  • SwiftyFORM - swift 表单输入框架(亮点是表单验证规则引擎),是我见过地最易用的 Swift 表单组件。
  • SwiftSpinner - SwiftSpinner是使用swift制作的一款精致带感的指示器,并且连带有字体信息显示,模糊背景,半透明,扁平化等IOS8的效果。
  • AKPickerView-Swift - 一款小而美的 3D 效果选择器。
  • iOS-RatingBar - iOS-RatingBar swift版的评分控件,跟Android的RatingBar一样有两种模式,评分模式和只读模式’支持视图编辑,自定义星星数量,评分等级,另外还能支持非整数星,0.5颗星,0.1颗星,可以开启动画效果。
  • LxGridView-oc LxGridView-swift - 利用UICollectionView模仿iOS系统桌面图标的交互,作用如动图。
  • GMStepper - swift 带动画效果、支持手势滑动操作的步进标签。
  • LayoutTrait - swift 一个小类库。 做iPad 多任务分屏 适配的同学可以看一下。
  • BTNavigationDropdownMenu - 下拉列表暨导航标题组件。简单、直接、易用 -swift。
  • InceptionTouch.swift - 让没有 3D Touch 设备也有类似交互体验的 InceptionTouch 类(基于 UITextView 实现,支持日期,链接,电话号码,地址触摸响应)。
  • TWControls.swift - 简单的开关和按钮控制器,使用闭包来执行由控件触发的操作。
  • Instructions.swift - 可定制嵌入式操作指引框架及演示。
  • SMSegmentView.swift - 高可定制化,既支持横向,也支持纵向布局的图文 Segment Control 组件,节选器。
  • Gecco.Swift - Gecco.Swift 是一款支持对视图进行局部高亮的 Swift 库, 帮助 iOS 开发者快速创建产品的新手指导界面。
  • SubtleVolume.swift - 更隐蔽的系统音量替代指示器。
  • InkKit.swift - 该类库帮助开发者绘制简单图形更容易。
  • SwiftSVG - 支持多种接口(String, NS/UIBezierPath, CAShapeLayer, and NS/UIView)绘制 SVG 类库。
  • LeeGo.swift - 带来更 声明式的,可配置的和易复用的UI开发方式,让UI开发变得像玩乐高积木一样简单直观,某种程度上取代ComponentKit。用 struct 和 enum 来构建你的整套 UI
  • Caishen.swift - 简易、实用的付款输入及校验 UI 组件。

  • StackViewController - 方便 iOS 开发者使用 UIStackView 构建表单或其它静态内容视图。

  • LLBootstrapButton - Bootstrap 3.0扁平化风格按钮,自带图标,一句代码直接调用!
  • JMRoundedCorner - UIView设置不触发离屏渲染的圆角!

其他UI@

========

动画@

游戏@
侧滑与右滑返回手势@
  • SideMenu - swift实现,一款带动画效果可定制 Slide Menu,可以学习其动画实现思路。P.S. 对于Hamburger式菜单,虽然很常用,不过,苹果并不鼓励使用,甚至有开发小组对其弊病用自家上线应用前后数据对比进行了抨击。
  • QQConfiguration - swift,QQ-iPhone端框架,左侧菜单栏拖动手势。
  • SwiftPages - 高可定制类似 Instagram 视图滑动切换功能类库。API 简单、易用。
  • FlowingMenu.swift - 菜单如此出场方式(橡皮筋弹跳式动画)好玩又有趣。
gif动画@
  • YLGIFImage-Swift - YLGIFImage-Swift。
  • gifu.Swift - gifu.Swift高性能GIF显示类库。
  • droptogif - droptogif视频拖拽到应用窗口后自动转换为 GIF 动画(其转换进程动画效果也超赞)。
  • JWAnimatedImage.swift - JWAnimatedImage.swift集中了目前主流的 GIF 显示库(如 FLAnimatedImage,Gifu 等)的优点,进行重构,代码短小精悍。而且使用了新的 frame 提取算法。
  • SwiftyGif - 高性能 Gif 播放引擎。
  • PHImageKit.swift - 出自 Product Hunter 开发小组的带下载、缓存的 GIF 播放组件库。使用简单又方便。
其他动画@
  • popping - popping是一个POP 使用实例工程
  • PopMenu - 用POP动画引擎写的Sina微博的Menu菜单。
  • MZGuidePages - 自己写的通用导航页,可以直接引入工程使用,请参考案例(版本新特性、导航页、引导页)。
  • Wizardry.swift - 可重用的方法和框架实现向导式用户界面管理。(版本新特性、导航页、引导页)。
  • Spring - Spring是一个Swift编写的开源库,可简化Swift编写的iOS动画。支持shake、pop、morph、squeeze、wobble、swing、flipX、flipY、fall、squeezeLeft、squeezeRight以及squeezeDown等多种动画形式,用 IBDesignable 让使用者可以在 Xcode 中快速设置动画效果。
  • JGTransitionCollectionView - swift,基于集合视图扩展实现完成自动布局及单元项 Flip式动画效果(效果很赞)。组件使用方便、自然(只需设置集合视图数据源的标准方式即可)。
  • KYShareMenu - 带弹性动画的分享菜单。
  • BuildAnInfiniteCarousel - 自己动手造无限循环图片轮播,教程
  • tispr-card-stack - swift 卡片风格动画切换组件及完整交互示例。
  • ZLSwipeableViewSwift - swift 卡片堆叠效果的实现(ZLSwipeableView)】可实现类似Tinder和Potluck应用程序的卡片堆叠效果,该项目基于ZLSwipeableView objective-c实现。1.自定义动画。2.自定义滑动切换。3.自定义方向。4.撤销。
  • Koloda - 基于卡片的 Tinder-style 动画效果示例。精细绝人。更赞的是额外附了详细开发教程 How We Built Tinder-Like Koloda Animation in Swift 网页链接 。Yalantis 出品动画程序款款精品。
  • KDIntroView - swift 动态介绍视图框架及演示。另外两个相似的类库是 RazzleDazzle和 Presentation,择需使用。
  • RazzleDazzle - 【IFTTT开源Swift编写的帧动画框架–RazzleDazzle】RazzleDazzle 是IFTTT开源的一个iOS帧动画框架,非常适用于APP初次使用时的介绍和引导信息。JazzHands是UIKit一个简单的关键帧基础动画框架,可通过手势、scrollview、KVO等控制动画,被IFTTT应用在IFTTT for iPhone上。
  • SIFloatingCollection_Swift - 可定制的 Apple Music 风格浮动形状动画组件及演示。
  • CKWaveCollectionViewTransition - swift, UICollectionViewController之间切换的动画。
  • CardsAnimationDemo - swift, 《使用 UICollectionView 实现的一个卡片动画》不是直接操作所有 UIView 和 CALayer 的 transform3D 属性来实现整个效果的,而是使用 UICollectionView 来完成所有的视图管理和实现。
  • TKRubberIndicator.swift - 一个很不错的 page control。
  • TTGEmojiRate.swift - TTGEmojiRate.swift以Emoji表情为基础绘图,Swift开源项目: TTGEmojiRate的实现
  • CardAnimation.swift - CardAnimation 是国人开发的一个用 Swift 实现卡片垂直翻转动画的 Demo, 实现思路
  • CoreAnimationCode.swift - 提供了 “iOS Core Animation Advanced Techniques” 书籍中的代码实例, 方便开发者们进行参考学习。
  • UIViewXXYBoom.swift - 一个炫酷好玩的爆炸效果,如何实现这个效果
  • ZLSwipeableViewSwift - ZLSwipeableView - ZLSwipeableViewSwift在Tinder and Potluck中的动画效果实现思路(连续卡片翻页效果),最贴心的是作者提供了OC和Swift两个版本来供开发者使用,非常丝滑顺畅的效果。
  • RYCuteView - 用UIBezierPath实现果冻效果。 教程
  • IBAnimatable.swift - 第三方开源库IBAnimatable可以帮助我们在Interface Builder和Swift Playground里面设计UI, 交互, 导航模式, 换场和动画。整个App 都是通过 IBAnimatable 在Interface Builder 设计完成,没有任何一行代码。
  • MotionMachine.swift - 功能强大、优雅、模块化动画库。
  • circle-menu.swift - 动画效率很赞的圆形缩放菜单演示及类库。
  • BWWalkthrough.swift - BWWalkthrough.swift界面切换中加入灵动的动画效果。
  • hamburger-button.swift - hamburger-button.swift一个汉堡包动画关闭按钮。
  • HamburgerButton.swift - HamburgerButton.swift一个汉堡包动画返回按钮。
  • MDCSwipeToChooseView - MDCSwipeToChooseView翻牌子效果。
  • Advance.swift - 简单易用、功能强大的动画框架库。在手势交互、帧动画、自定义动画及仿真类型将是不错的选择。
  • HWAnimationTransition_Swift 、HWAnimationTransition_OC - 类似于格瓦拉启动页中的放大转场动画(objective-C && Swift)。教程
  • NumberMorphView.swift - 可爱的数字补间(变身)动画类库。
  • DisplaySwitcher.swift - 两个集合视图在不同布局(平铺和列表)间平滑切换。Yalantis 出品。
  • DynamicButton.swift - 一套完整、且带动画过渡的图标按钮库。
  • TKDotSegment.swift - 是一个带有圆点动画的 segment。
  • LiquidLoader.swift - 液态加载动画的轻量级 UI 组件。
  • 15DaysofAnimationsinSwift - 15DaysofAnimationsinSwift动画。
  • Interpolate.swift - 手势驱动交互式转场动画框架库。这个很专业,且非常有意思。
  • PeekPop.swift - 3DTouch动画组件。
  • fantastic-ios-animation.swift - 基于 UI 组件类别分类,且带精彩动画效果的 iOS 组件库集合。
  • GridPanelDemo 赞,一个点击翻转的动画Demo

========

网络@

网络连接@
  • Alamofire - Alamofire是AFNetworking的作者mattt新写的网络请求的swift库。Alamofire 最佳实践
  • SwiftRouter - A URL Router for iOS, written in Swift 2.2 :large_orange_diamond:
  • AlamofireObjectMapper.swift - 将Alamofire JSON响应数据 转为swift对象。
  • RxAlamofire.swift - 为Alamofire提供函数响应式(FRP)调用接口,以优雅的方式使用Alamofire进行网络请求。
  • socket.io-client-swift - WebSockect 客户端类库。开放的通讯协议,有利于构建强大地跨平台应用。
  • Transporter - swift, 短小、精悍、易用的多文件(并发或顺序)上传和下载传输库。还支持后台运行、传输进程跟踪、暂停/续传/取消/重试控制等功能。
  • Just - 小而美的 HTTP 类。功能简单、直接、完整且健壮性高– swift。
  • Future - 基于微框架设计思想的异步执行及结果响应类,代码即简单又干净– swift。
  • HFDownLoad - iOS开发网络篇之文件下载、大文件下载、断点下载:NSData方式、NSURLConnection方式、NSURLSession下载方式 下载方式具体的思路、区别见Blog 。
  • Pitaya.swift - Pitaya 是纯 Swift 写的 iOS 网络库,支持 Basic Authorization、SSL 钢钉、HTTP raw body / JSON body、快速文件上传等特性,并通过内置 JSONNeverDie 实现了对 JSON 的完全支持,开箱即用。 中文文档
  • starscream.swift - starscream.swift:WebSocket客户端类库。
  • SwiftNet.swift - 基于 RxSwift 和 Alamofire 的网络请求简易封装库。
  • Networking.Swift - 使用简单、功能惊喜,基于 NSURLSession 的网络封装。
图像获取@
  • Kingfisher - 纯 Swift 实现的类 SDWebImage 库,实现了异步下载和缓存图片。
  • KFSwiftImageLoader - Swift,一个图像缓存加载库。
图像获取@
  • Kingfisher 一个用于图片缓存的开源库,类似 SDWebImage,但是完全基于 Swift 语言开发。
网络聊天@
  • MessageKit.swift - 消息 UI 库 JSQMessagesViewController 的 Swift 版。
  • jchat-swift - 一个聊天 App,具有完备的即时通讯功能,JChat 的功能基于极光 JMessage SDK 来开发。
网络测试@
  • Reachability.swift - 用于替换苹果的 Reachability 类,可以方便地检测当前是否联网以及具体的联网状态。
  • NetReachability - swift2.0 简单的方法检查网络连接的连通性,提供通知中心集成接口。
  • SimpleBS.swift - 网络测试小工具。
网页框架@
  • Perfect.swift - Perfect 致力于 Swift 服务端应用,从打造专业应用服务器开始。Swift服务端编程:Perfect项目上手指南
  • swift-http - Swift HTTP Server,又一个 Swift 服务器,最大的亮点是支持 Docker 部署。
  • Swifton - Swifton是一个优秀的Swift on Rails 的Web Framework。
  • Taylor.swift - Taylor一个swift的轻量级的http服务器的库。
  • NetworkObjects.swift - NetworkObjects.swift轻量版HttpServer框架,跨平台解决方案。
  • vapor.swift - vapor.swift:swift的服务器库 vapor。
  • Kitura.swift - Kitura.swift:安装、使用步骤及文档最为清晰地来自 IBM Swift 开发组的开源 Web 服务器。此外,IBM 云服务 Bluemix 也为 Swift 打开通路。
CSV@
  • CSwiftV - A csv parser written in swift conforming to rfc4180 :large_orange_diamond:
  • SwiftCSV - CSV parser for Swift :large_orange_diamond:
WebView与WKWebView@

Json@

  • ObjectMapper - 很赞 ObjectMapper 是一个基于 Swift 语言开发的能够让 JSON 与 Object 之间轻易转换的类库。通过 ObjectMapper 我们可以将 JSON 数据转换成 Model 对象或将 Model 对象转换成 JSON 数据。 Simple JSON Object mapping written in Swift
  • Decodable - Swift 2 JSON parsing done (more) right :large_orange_diamond:
  • Jay - Pure-Swift JSON parser & formatter. Linux & OS X ready. :large_orange_diamond:
  • SwiftyJSON - The better way to deal with JSON data in Swift. :large_orange_diamond:
  • XMLDictionary - ios与mac os平台下xml与NSDictionary相互转化开源类库。
  • AEXML.swift - AEXML.swift简单又易于的XML解析类及示例。
  • CFRuntime - “Swift 版的 MJExtension,运行时、反射与一键字典模型互转”。
  • protobuf-swift - Protocol Buffers 的 Swift 语言实现库。P.S. Protocol Buffers 是 Google 开源项目,主要功能是实现直接序列化结构化的对象数据,方便跨平台快速传递,开发者也可以直接修改 protobuf 中的数据。相比 XML 和 JSON,protobuf 解析更快,存储更小。
  • JSONCodable - 基于 Swift 2.0 新特性(Protocol Extensions and Error Handling)的JSON 解析类。
  • SwiftyJSON - 使Swift的JSON解析变得简单。
  • JSONNeverDie.swift - JSON 到 Model 类的自动映射工具。
  • Fuzi.swift - Swift实现的轻量快速的 XML/HTML 解析器。
  • SWXMLHash.swift - 易用的 XML 解析类库。非常实用的“轮子”。
  • YYModel - 高性能的 iOS JSON 模型框架。
  • TidyJSON.swift - TidyJSON.swift一款简单、易用、明了的 JSON 解析小类库。
  • PMJSON.swift - PMJSON.swift简单、实用、高效的 JSON 解析类库。
  • Unbox.swift - 极为易用、轻量,更少辅助代码的 JSON 解析类。
  • Wrap.swift - 方便、易用的对象转 JSON 类库。
  • JASON - 高效的Json解析(Swift) Fast JSON parsing for Swift
  • JSONCodable - Swift json编码解码三方库 Hassle-free JSON encoding and decoding in Swift
  • Coolie - Swift json转model的三方库 Coolie helps you to create models (& their constructors) from JSON file.
  • Tailor - 一个非常快和方便的对象映射Swift三方库 A super fast & convenient object mapper tailored for your needs.
  • alexander - 一个非常简洁的json处理三方库 An extremely simple JSON helper written in Swift.
  • Freddy - 一个可以重用的json解析库 A reusable framework for parsing JSON in Swift.
  • mapper - 一个json反序列化库 A JSON deserialization library for Swift
  • AlamofireJsonToObjects - 一个将json data转为Swift对象的类扩展 An Alamofire extension which converts JSON response data into swift objects using EVReflection
  • Alembic - 功能性的json解析库 Functional JSON parsing, mapping to objects, and serialize to JSON :large_orange_diamond:
  • Wrap - The easy to use Swift JSON encoder :large_orange_diamond:
  • Arrow - 一个Swift JSON解析库 JSON Parsing Library for Swift
  • Genome - 一个易用、多样、安全,包含错误映射的JSON转Model的Swift库. A simple, type safe, failure driven mapping library for serializing JSON to models in Swift 2.0 (Supports Linux)

通讯录@

  • PPGetAddressBookSwift - 一行代码获取按A~Z分组精准排序的通讯录联系人 Swift版( 已处理姓名所有字符的排序问题)

Email@

  • Postal A swift framework for working with emails,Postal is a swift framework providing simple access to common email providers.

三方分享、支付、登录等等@

其他库@

  • SwiftDate - 特别完整、强大的日期时间操作管理类库。它几乎涵盖了已知开源日期类库所有优秀特性。 他能帮你轻松处理时区,处理时间加减,计算到期时间等等场景下的问题。
  • SYKeyboardTextField - SYKeyboardTextField 是一个轻巧,简单,非侵入式的键盘附随输入框! 采用Swift编写。
  • IQKeyboardManager - 处理键盘事件强大的库,有OC和Swift版本,纯代码、Storyboard和Xib都适用。
  • ZFScan - 仿微信 二维码/条形码 扫描。
  • QRCodeReader.swift - QRCodeReader.swift一款简单的 QR 二维码阅读组件及示例,提供前后相机切换功能。
  • swiftScan - 具有丰富功能的二维码扫描组件及类库。对应OC版本LBXScan
  • QR-Code-Generator.swift - 生成二维码。
  • Parsimmon - swift,小而美的语言学类库封装工具包。提供分词、标记词性、词形归并、朴素贝页斯分类、决策树等自然语言分析小工具。P.S. 英语分词效果好于中文,感兴趣的同学可以针对中文做一些优化开发。参考译文 NSHipster - NSLinguistic​Tagger
  • MKMapView-Extension - 这是关于 MKMapView 写的一个基于swift的扩展,可以扩展 MKMapView 的相关功能,减少复用代码量。
  • SwiftValidator - 基于规则的输入验证类库。项目良好的面向对象设计思想,使规则的扩展及自定义非常方便。更专业的规则引擎(甚至是基于自然语言的规则配置)解决方案,比如:开源的 Drools,商用的 ILOG 等。
  • Validated.swift - Validated.swift通过值验证或限定,快速定义新类型的微类库(约50行代码)。
  • SwiftOCR - 识别字母和数字相较于 Tesseract 有压倒性优势(附图)的 OCR 类库。
  • Regex.swift - 实用的正则表达式微框架类库。
  • PySwiftyRegex.swift - 像Python一样简洁高效地作正则处理。
  • PhoneNumberKit.swift - 解析、格式化及验证国际电话号码工具库(相当于 Google 的 libphonenumber 库的 Swift 版本)。
  • BFKit-Swift - BFKit-Swift 这套工具库可以提高应用开发效率。
  • SwiftSequence - 简洁、灵活、多变的操作 SequenceType 的类库(基于微框架(μframework)设计思想)。
  • IDNFeedParser - 一个简单易用的Rss解析库。
  • Swifternalization - 一套实用的本地化工具库。使用教程及 API 文档完整。值得收入项目的“轮子”。
  • Localize-Swift - Localize-Swift一款开发者不可或缺的国际化及本地化字符串框架支持类库。同样地,使用简单、直观又方便。
  • apous - 一款有趣的 Swift 应用 - 让 Swift 成为脚本语言。
  • ControlOrientation - 如何用代码控制以不同屏幕方向打开新页面【iOS】, 使用说明
  • SwiftyStoreKit - 一款轻量级的 iOS 应用内购买框架。
  • Device-swift - 可以非常方便的获取设备型号和屏幕尺寸,实现起来难度不大,大家可以学习一下源码。
  • RunKit.swift - 针对 GCD 框架的一个友好访问封装库(支持方法链式调用)。
  • Plum-O-Meter - swift 称重应用, (3D Touch之我见)[http://swift.gg/2015/10/23/3d-touch-impressions-and-thoughts/]
  • 打开自带地图、百度地图、腾讯地图 - 打开自带地图、百度地图、腾讯地图。
  • MapManager.swift - MapManager.swift地图及路径管理封装库。
  • eviltransform.swift - eviltransform.swift解决国内GPS地图坐标偏移问题,它将政府加密过的GCJ-02坐标,转成世界通用的WGS-84坐标。
  • BabyBluetooth - 是一个非常容易使用的蓝牙库, 适用于 iOS 和 Mac OS, 基于原生 CoreBluetooth 框架封装, 可以帮开发者们更简单地使用 CoreBluetooth API, 使用链式方法体, 使得代码更简洁、优雅。iOS蓝牙开发(四):BabyBluetooth蓝牙库介绍
  • RxBluetoothKit.swift - 基于 RxSwift 的蓝牙通讯库。
  • BluetoothKit.swift - 基于 CoreBluetooth API 实现iOS/OS X 设备间蓝牙通讯封装类库。功能强大、传输稳定,示例完整,很酷。
  • CoreDataStack.swift - 存储栈。
  • SYNQueue.swift - 执行队列类库。
  • DDMathParser.swift - 相比 NSExpression 和 GCMathPaser,功能更强大的数学表达式解析器。
  • RateLimit.swift - 简单、实用定时执行任务工具类库。
  • shoppingCart.swift - swift的购物车demo,采用纯代码UI,autolayout自动布局,core animation动画效果。
  • SwiftyGPIO - 通过 Swift 语言去控制基于 Linux 主板(比如:C.H.I.P. 和 树莓派) 的 GPIO(General Purpose Input Output ),去完成简单的工控功能(比如 LED 灯的显示)。
  • Scale.swifty - 简单直观的单位计算及换算类库(支持常用计量类型)。代码简洁性、直观性杠杠的。
  • swift-pons - 面向协议的不受长度限制数字类型及数学计算扩充类库。用它做一款最牛科学计算器妥妥地。
  • SwiftString - SwiftString:String 扩展功能很丰富(无论格式化杂乱字符串,还是子串查找,亦或是格式转换都很强大)。
  • FileBrowser.swift - FileBrowser.swift 一款开源的 iOS 文件浏览器, 支持文件搜索, 文件预览和 3D touch 功能。
  • AFBrushBoard.swift - AFBrushBoard.swift基于swift的毛笔画板Demo。包含多阶贝塞尔曲线的抽取、模拟画笔速度等算法。
  • SwiftForms - SwiftForms表单递交库,快速开发利器。
  • Design-Patterns-In-Swift - Design-Patterns-In-Swift如何使用常用设计模式及示例。
  • Dollar.swift - Dollar.swift是一个Swift库,无需扩展任何内置对象就为Swift语言提供有效的函数式编程辅助方法,类似于Lo-Dash或JavaScript中的Underscore。而Cent则是通过扩展功能来扩展Swift中的特定对象类型。
  • Underscore.swift - 函数式编程辅助方法,可靠性上压倒目标对手是 Dollar。
  • PathKit.swift - PathKit.swift小而美的路径管理类。
  • Surge.swift - Surge.swift基于苹果Accelerate高性能计算数学框架封装库。
  • Async.swift - Async.swift简洁的后台执行代码的异步封装库。
  • AlecrimAsyncKit.swift - 一款很优雅的异步执行框架库。
  • BrightFutures.swift - BrightFutures.swift漫长或复杂计算由独立线程异步来完成。
  • Euler.swift - Euler.swift直观、简洁的数学表达式∛27÷3+∑[3,1,2]。
  • Siren.swift - Siren.swift当应用更新时,通知用户并提供App Store链接。
  • BTree.swift - BTree.swift:相对于标准集合类型具有更优执行性能的基于B-Tree的优化集合类型实现类库。
  • PromiseKit - 同时支持 Swift 及 Objective-C 的 Promise 类库,异步编程类库 提供了很多实用的异步函数 让异步编程更简单。
  • Duration.swift - 测量代码片段执行时间工具类库(Swift)。
  • Bolts-Swift - 全平台(所有支持 Swift 的设备)任务管理 futures/promises 异步实现类库。
  • BCColor.swift - 轻量而强大的颜色处理库,纯 Swift 版。 支持从图片拾取一套主题色,类似AppleMusic;支持图片黑白化、对颜色的加深和变浅、生成渐变颜色等。
  • AIToolbox.swift - AI 主流模块集工具箱库。其中涉及 AI 知识实在广阔又高端。
  • EZSwiftExtensions - 对Swift标准库, Foundation, UIKit 提供了很多高级扩展函数。
  • TempiBeatDetection.swift - Swift 语言写的音乐节奏节拍检测库。
  • Venice.swift - 让 Swift 3 提前支持协程(Coroutine)。P.S. Chris 曾答疑过,Coroutine 不在 Swift 3 支持范围中,将在更晚时候讨论语言级支持。
  • FlatBuffersSwift - Swift 版 FlatBuffers 实现类库。P.S. FlatBuffers 是跨平台、高效,提供了 C++/Java 接口的序列化开源工具库。
  • Lyft.swift - 一套面向 Lyft 开发者的 Swift API 类库。
  • Up-Down.swift - Up-Down.swift:在 OS X 菜单栏上实时显示网络上传和下载速度小工具。
  • Algorithm.swift - 算法和概率模型工具集。(作者 Daniel Dahan)
  • Spots.swift - 一套为了加速开发效率、将 view models 采用 JSON 格式存储于云端 view controller 框架库。
  • PinpointKit.swift - 简单的手势动作快速触发反馈组件。主要功能包含自动截屏、附加说明和日志。支持添加可定制箭头、着重框、文本、模糊打码等常用快照编辑功能。它非常适合开发过程中测试人员反馈缺陷。
  • Switcher.swift - 一个 OS X 小 App,可以很轻松地切换 App Store 和 iTunes 的账号,对于同时使用多个 Apple ID 的人来说非常地方便。
数据存储@

缓存处理@

  • Cache.swift - 一款简单、易用的缓存库。支持 MemoryCache, DiskCache 以及前两项组合的 MultiCache。
  • Cache.swift - Nothing but Cache。
  • AwesomeCache.swift - Delightful on-disk cache (written in Swift)。
  • Track.swift - 基于文件系统和链表的 Cache。分为 Disk 和 Memory,线程安全,支持 LRU 淘汰,性能尚可。

CoreData@

数据库@

  • RealmIncrementalStore.swift - RealmIncrementalStore.swift:集 Realm 数据库和 CoreData 对象模型两者优势的 Realm 数据库访问类库。
  • Breeze - 用Swift写的一个轻量级的CoreData管理工具,并且还支持iCloud 。
  • AlecrimCoreData - Swift,更容易地访问 CoreData 对象封装类库。除了 CRUD,还提供指针定位,强大的排序、筛选,异步数据获取,以及独立线程后台存取数据。
  • SQLite.swift - 纯swift实现的类型安全的SQLite3封装,数据存储和JSON解析是永恒的话题。
  • fluent.swift - 纯swift实现的类型安全的SQLite3封装,数据存储和JSON解析是永恒的话题。
  • swiftydb - 是一个第三方 SQLite 工具,能够大大简化数据库操作。如果你不放心 Realm,那就用 SwiftyDB 吧。使用教程demo
  • Graph.swift - 设计新颖、使用简单基于 Core Data 的数据驱动框架库 (作者Daniel Dahan)。
  • SwiftStore - Key-Value store for Swift backed by LevelDB :large_orange_diamond:

PDF@

图像浏览及处理@

  • ShinpuruImage - Syntactic Sugar for Accelerate/vImage and Core Image Filters :large_orange_diamond:
  • core-image-explorer - Core Image 滤镜处理图片– swift ,Core Image 介绍
  • GPUImage2.swift - Swift 版基于 GPU 图像和视频处理框架库。
  • TimingFunctionEditor - TimingFunctionEditor用swift编写, 贝塞尔曲线编辑器,编辑后可以预览或拷贝代码片段直接使用。P.S. 该项目采用更简单的依赖管理器。 Carthage ,而非常用的 CocoaPods。Carthage介绍中文
  • AAFaceDetection - AAFaceDetection–swift,简单、实用的面部识别封装库。虽然该技术从 iOS 5 发展,不过真正有趣的应用还不多。
  • Concorde - swift, Concorde, 一个可用于下载和解码渐进式 JPEG 的库, 可用来改善应用的用户体验。
  • ZoomTransition - swift, 通过手势操控图片的放大、缩小、旋转等自由变化效果的组件及示例。
  • AFImageHelper - swift,一套针对 UIImage 和 UIImageView 的实用扩展库,功能包含填色和渐变、裁剪、缩放以及具有缓存机制的在线图片获取。
  • PinterestSwift - swift,Pinterest 风格图片缩放、切换示例。
  • PhotoStackView-Swift - PhotoStackView——照片叠放视图,使用说明
  • MPParallaxView - 是用 Swift 写的类似 Apple TV Parallax 效果的视图。
  • SDECollectionViewAlbumTransition - 用自定义的 push 和 pop 实现了有趣的 iOS 相册翻开动画效果。
  • SKPhotoBrowser.swift - swift中规中矩、实用的图片浏览类库。示例也很完整。
  • Nuke.swift - 完整、强大、实用的图片管理类库。主要功能包括可定制装载,缓存,滤镜及尺寸变换。
  • PagingView.swift - 注重细节的自动布局分页视图组件。
  • DouBanMeinv.swift - 抓取豆瓣美女图片,瀑布流显示。
  • SwViewCapture.swift - SwViewCapture.swift一个用起来还不错的iOS截图库.(支持截取所有内容, 适用于所有ScrollView组成的视图, 包括WebView)。
  • Filterpedia.swift - 强大的图片滤镜库演示。
  • preview-transition.swift - 通过向导式代码实现步骤,实现完整、自然流畅的图片预览及转场功能。
  • CartoonEyes.swift - 前置摄像头捕获图像后,采用 Core Image 脸部识别 CIDetector 和漫画效果滤镜复合出卡通效果眼睛。

图表

摄像照相视频音频处理

  • CameraManager - 相机管理封装类库。看着极好用的样子—-swift。
  • recordDemo.swift - 一个Swift语言实现直接可以用的录音Demo,实现说明
  • Swift-Radio-Pro - 集成 LastFM 的专业电台应用(基于 Swift 2.0)。
  • mobileplayer-ios.swift - 很不错的高度可定制播放器项目。
  • Periscope-VideoViewController.swift - 简洁实用的视频快进、倒带控制视图类库。
  • AudioKit.swift - 音频合成、加工及分析平台(支持 iOS、OS X、tvOS)框架库。无论其易用性,还是功能性及专业性。
  • SkfSwiftCammer - 一个相机demo,在oc里面调用了swift。
  • BMPlayer.swift - 基于 AVPlayer 使用 Swift 封装的视频播放器,方便快速集成,支持横屏、竖屏,上下滑动调节音量、屏幕亮度,左右滑动调节播放进度。

响应式框架

  • RxSwift - RxSwift:函数响应式编程框架。
  • RxPermission.swift - 通过绑定 RxSwift 实现的 RxPermission。
  • Permission.swift - 统一的 API 请求 iOS 本地设备及资源权限类库。
  • ReactiveAnimation - ReactiveCocoa 推出了一个叫 ReactiveAnimation 的子项目,直接用完全用 Swift 来实现了。
  • Swiftest - BDD 全称 Behavior Driven Development,行为驱动开发。各种 DD 数不胜数,孰优孰劣争论不休,其实归根结底还是要根据使用场景进行选择。

消息相关@

消息推送客户端@
消息推送服务端@
通知相关@
  • Homeoff - 用swift写了一个模仿Launcher通知中心快捷方式的应用。支持20个应用,并增加了一个返回到桌面来解放Home键的功能。
  • SwiftNotificationCenter - 一个面向协议的类型安全、线程安全、内存安全的通知中心。

时间日期@

版本新API的Demo@

代码安全与密码@

  • OAuthSwift - OAuthSwift国外主流网站OAuth授权类库。
  • CryptoSwift - swift加密库, 支持md5,sha1,sha224,sha256…。

测试及调试@

  • depcheck Swift 工程分析工具(Dependency analyzer tool for Swift projects)
  • CleanroomLogger - 相当于 CocoaLumberjack 或 Log4j 的 Swift 版本,功能上甚至更强大。另外,源代码中已经内含了完整的 API 文档,使用非常方便。
  • Quick - 用于Swift中的单元测试(也可用于Objective-C),与Xcode整合在一起。如果你是Objective-C的粉丝,我建议用Specta代替这个,但是对Swift使用者来说,Quick是最佳选择。
  • Sleipnir - Swift的测试框架。
  • XXPlaceHolder.swift - MMPlaceHolder的swift版本。
  • SwiftyBeaver - 一个完善的日志工具,支持彩色输出、输出内容到文件、重要性分级、多输出目标。工具执行在后台,不影响性能,可以极大提高开发效率。
  • swiftlog - 为Swift 应用提供快捷添加日志信息的方法,Swift 包管理支持(SPM)、 使用惊艳的 Rainbow 包输出彩色日志、支持写入文件。使用 swiftlog
  • Log.swift - 灵活、易用、可定制输出格式和主题风格的日志类(Swift),支持控制台彩色输出。
  • Cuckoo.swift - Cuckoo.swift一款用法更接近于传统单元测试 Mock 框架库(区别之处在于需要用脚本预先生成 Mock 类)。
  • XCGLogger.swift - XCGLogger.swift功能完整的日志管理类库。
  • Peek.swift - 更友好、手势方式检查界面内组件布局信息(相当于浏览器元素检查功能),界面调试利器。

动态更新@

AppleWatch@

  • Apple Watch开发教程资料汇总 - Apple Watch开发教程资料汇总。
  • Stargate - 通过 iPhone 桥接实现 Mac 与 Watch 的即时通讯。Stargate 通过封装两个优秀的基础类库 MMWormhole 和 PeerKit 实现高效的通讯应用。–swift
  • soon - 一款倒计时 WatchKit 示例应用。作者从架构的角度,思考如何设计一款完整、通讯高效且性能又好的 WatchKit 扩展应用。该示例学习性非常强。–swift
  • MMWormhole.swift - MMWormhole.swift:iOS或OS X扩展与宿主应用的通讯框架。

VPN@

  • vpnon - swift的VPN On 的源码和本地化内容都是开放的: 官方网站

完整App@

  • V2ex-Swift - 用 Swift 写的 V2EX 客户端。
  • iBBS-Swift - “新手开源一个用Swift(2.0)写的论坛客户端”。BBS 服务端
  • NirZhihuDaily2.0_swift - 精仿了知乎日报iOS端练手,Swift2.0,注释相当详细。
  • DesignerNewsApp - Swift 开发的 DesignerNews 客户端,看着美美的!
  • Eidolon - 艺术品拍卖的投标亭平台,用swift与反应式编程框架 ReactiveCocoa。
  • BaiduFM-Swift - 百度FM, swift语言实现,基于最新xcode6.3+swift1.2,初步只是为了实现功能,代码比较粗燥,后面有时间会整理,支持Apple Watch。
  • Tuan - 模仿MJ老师iPad版美团(swift版),偶有bug 见谅。
  • CocoaChinaPlus - CocoaChina+是一款开源的第三方CocoaChina移动端。整个App都用Swift2.0编写(除部分第三方OC代码外,比如JPush和友盟)。
  • SimpleMemo - 易便签已经转到Swift2.0,全面适配iOS9和Watch OS2,并支持iPhone6s和iPhone6sPlus的3D Touch功能,包括图标快捷键和内容预览。
  • furni-ios.swift - furni-ios.swift是由 Twitter 开发团队出品的一款用 Swift 写的 iOS 家居商城应用, 其主要目的在于让开发者从这款 Demo 应用中看出 Fabric 的强大。
  • SelectionOfZhihu.swift - 『看知乎』iOS 客户端, 项目说明

  • Yep.swift - Yep 一个由天才开发给天才们使用的社交软件。

  • LoveFreshBeen.swift - 高仿爱鲜蜂 - Swift2.0
  • trySwiftApp.swift - trySwiftApp一款较为完整的会议原型应用。有需求的同学可以做为开发参考。
  • PinGo.swift - PinGo.swift:纯Swift编写的仿“随遇”App。
  • UmbrellaWeather.swift - UmbrellaWeather.swift使用 Swift 编写的一款天气应用,现已上架 AppStore。
  • SwiftWeather - SwiftWeather清新淡雅持续改进天气预报项目。
  • Phonetic.swift - Phonetic一个 iOS 版的 Phonetic Contacts,功能很多,其中昵称功能非常实用,已在 GitHub 开源并上架 App Store。
  • edhita.swift - edhita.swift支持Markdown, HTML预览的文本编辑器。
  • PilesSugar.swift - PilesSugar.swift:Swift高仿项目,堆糖。
  • react-native-gitfeed - 目前最实用简洁的github客户端了。
  • SoundCloudSwift - SoundCloud的Swift版本,采用Swift2.0,Reactive API with ReactiveCocoa 4.0。
  • LeagueofLegends - 一个关于英雄联盟的完整iOS开源项目,接口均来自多玩,腾讯各大游戏平台。
  • Coderpursue.swift - 一款 Github 第三方客户端,使用最新 Swift 语言编写。
  • BTApp - BTApp 仿半糖 iOS App 的 Demo 应用。

好的文章@

Xcode插件@

  • Swimat - Swimat,是一款Xcode 插件,帮你一键格式化 swift 代码。
  • XcodeSwiftSnippets - XcodeSwiftSnippets, 提供了很多可在 Xcode 上使用的 Swift 代码片段, 通过自动补全的方式极大的提高了开发效率。

美工资源@

其他资源@

开发资源@

二维码@

  • LBXScan 赞 A barcode and qr code scanner (二维码、扫码、扫一扫、ZXing和ios系统自带扫码封装,扫码界面效果封装)(Objective-C和Swift均支持).
开发资料@

学习资料@

他人开源总结@

学习笔记@

好用的软件@

设计@

物联网@

视频播放器@
2018-01-31 16:05:24 u014220518 阅读数 5216

用Swift写服务端 — Perfect框架学习(一)

一、Perfect简介

Perfect是一组完整、强大的工具箱、软件框架体系和Web应用服务器,可以在Linux、iOS和macOS (OS X)上使用。该软件体系为Swift工程师量身定制了一整套用于开发轻量、易维护、规模可扩展的Web应用及其它REST服务的解决方案,这样Swift工程师就可以实现同时在服务器和客户端上采用同一种语言开发软件项目。

由于建立在一个高性能异步网络引擎基础上,Perfect还能够在FastCGI上运行,支持安全套接字加密(SSL)。该软件体系还包含很多其它互联网服务器所需要的特点,包括WebSockets和iOS消息推送,而且很快会有更多强大的功能支持。


无论您是资深程序员还是入门级的软件工程师,本文都能够帮助您快速启动Perfect实现服务器项目开发运行。

二、Perfect项目快速上手

1.编译入门项目

我们在Perfect官网的git上直接下载一个入门项目。编译后就可以启动一个本地的服务,监听你的8181端口:

git clone https://github.com/PerfectlySoft/PerfectTemplate.git
cd PerfectTemplate
swift build
.build/debug/PerfectTemplate



我们可以在控制台看到以下内容:

Starting HTTP server on 0.0.0.0:8181 with document root ./webroot

服务器现在已经运行并等待连接。从浏览器打开http://localhost:8181/ 可以看到欢迎信息。


 在终端控制台中输入组合键“control-c”可以随时终止服务器运行。


2.Xcode管理

Swift软件包管理器(SPM)能够创建一个Xcode项目,并且能够运行PerfectTemplate模板服务器,还能为您的项目提供完全的源代码编辑和调试。在您的终端命令行内输入:

swift package generate-xcodeproj

然后打开产生的文件“PerfectTemplate.xcodeproj”,确定选择了可执行的目标文件,并选择在“我的Mac”运行。现在您可以运行并调试服务器了。



直接运行XCode,然后在浏览器中输入0.0.0.0:8181也是能直接运行的!

三、搭建HTTP服务器

编辑main.swift文件

import PerfectLib
import PerfectHTTP
import PerfectHTTPServer

//HTTP服务
var routesArr = [Dictionary<String, Any>]()

var someDict1 : [String:String] = ["method":"GET","url":"/api"]

routesArr.append(someDict1)

let networkServer = NetworkServerManager(root: "webroot", port: 8080, routesArr: routesArr)

networkServer.startServer()
创建NetworkServerManager.swift文件

//
//  NetworkServerManager.swift
//  PerfectTemplatePackageDescription
//
//  Created by ZFJ on 2018/1/9.
//

import PerfectLib
import PerfectHTTP
import PerfectHTTPServer

open class NetworkServerManager {
    fileprivate var server: HTTPServer
    internal init(root: String, port: UInt16, routesArr: Array<Dictionary<String, Any>>) {
        server = HTTPServer.init()                             //创建HTTPServer服务器
        for dict: Dictionary in routesArr {
            let baseUri : String = dict["url"] as! String      //跟地址
            let method : String = dict["method"] as! String    //方法
            var routes = Routes.init(baseUri: baseUri)         //创建路由器
            let httpMethod = HTTPMethod.from(string: method)
            configure(routes: &routes, method: httpMethod)     //注册路由
            server.addRoutes(routes)                           //路由添加进服务
        }
        server.serverName = "localhost"                        //服务器名称
        server.serverPort = port                               //端口
        server.documentRoot = root                             //根目录
        server.setResponseFilters([(Filter404(), .high)])      //404过滤
    }
    
    //MARK: 开启服务
    open func startServer() {
        do {
            print("启动HTTP服务器")
            try server.start()
        } catch PerfectError.networkError(let err, let msg) {
            print("网络出现错误:\(err) \(msg)")
        } catch {
            print("网络未知错误")
        }
        
    }
    
    //MARK: 注册路由
    fileprivate func configure(routes: inout Routes,method: HTTPMethod) {
        routes.add(method: .get, uri: "/selectUserInfor") { (request, response) in
            let path = request.path
            print(path)
            let jsonDic = ["hello": "world"]
            let jsonString = self.baseResponseBodyJSONData(code: 200, message: "成功", data: jsonDic)
            response.setBody(string: jsonString)                           //响应体
            response.completed()                                           //响应
        }
        
//        if method == .get{
//            //get请求
//        }else if method == .post{
//            //post请求
//            let postParams = request.postParams
//            print(postParams)
//        }
    }
    
    //MARK: 通用响应格式
    func baseResponseBodyJSONData(code: Int, message: String, data: Any!) -> String {
        var result = Dictionary<String, Any>()
        result.updateValue(code, forKey: "code")
        result.updateValue(message, forKey: "message")
        if (data != nil) {
            result.updateValue(data, forKey: "data")
        }else{
            result.updateValue("", forKey: "data")
        }
        guard let jsonString = try? result.jsonEncodedString() else {
            return ""
        }
        return jsonString
    }
    
    //MARK: 404过滤
    struct Filter404: HTTPResponseFilter {
        func filterBody(response: HTTPResponse, callback: (HTTPResponseFilterResult) -> ()) {
            callback(.continue)
        }
        func filterHeaders(response: HTTPResponse, callback: (HTTPResponseFilterResult) -> ()) {
            if case .notFound = response.status {
                response.setBody(string: "404 文件\(response.request.path)不存在。")
                response.setHeader(.contentLength, value: "\(response.bodyBytes.count)")
                callback(.done)
            } else {
                callback(.continue)
            }
        }
        
    }
}














运行结果




接口访问


四、搭建MySql服务器

我的电脑上安装的有Homebrew,所以我直接通过Homebrew安装MySql,安装命令:

brew install mysql

配置MySql

#开启MySQL服务
mysql.server start
#初始化MySQL配置向导
mysql_secure_installation
我电脑上数据库已经而配置好了,这里面我就不演示了,如果有不了解的可以加我QQ或者QQ群;


五、安装Navicat Premium

Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL、SQLite、Oracle 及 PostgreSQL 资料库,让管理不同类型的资料库更加的方便。


Navicat Premium_12.0.22破解版下载


这里面下载好了以后会让你输入安装密码,密码为:xclient.info 

如下图:


安装成功以后如果打开出现如下图的错误,只需要在终端输入以下代码就好;


执行以下命令开启
sudo spctl --master-disable


这样就可以打开了,然后链接MySQL数据库,如下图


然后创建数据库userInforsTable,然后创建了一个userTable表,并向userTable表中添加了三条数据;如下图:


这样你就可以操作MySQL数据库了,当然你也可以通过终端直接操作数据库;


六、编辑Perfect服务端

创建DataBaseManager.swift数据库管理类,在这里我们对数据库进行增删改查操作;

//
//  DataBaseManager.swift
//  PerfectTemplatePackageDescription
//
//  Created by ZFJ on 2018/1/17.
//

import MySQL

//MARK: 数据库信息
let mysql_host = "127.0.0.1"
let mysql_user = "root"
let mysql_password = "12345678"
let mysql_database = "userInforsTable"

//MARK: 表信息
let userTable = "userTable"                    //用户信息表

open class DataBaseManager {
    fileprivate var mysql : MySQL
    internal init() {
        mysql = MySQL.init()                       //创建MySQL对象
        guard connectDataBase() else{            //开启MySQL连接
            return
        }
    }
    
    //MARK:开启链接
    private func connectDataBase() -> Bool{
        let connected = mysql.connect(host: mysql_host, user: mysql_user, password: mysql_password, db: mysql_database)
        guard connected else{
            print("MySql链接失败" + mysql.errorMessage())
            return false
        }
        print("MySql链接成功")
        return true
    }
    
    //MARK: 执行SQL语句
    /// 执行SQL语句
    ///
    /// - Parameter sql: sql语句
    /// - Returns: 返回元组(success:是否成功 result:结果)
    @discardableResult
    func mysqlStatement(_ sql:String) -> (success:Bool,mysqlResult:MySQL.Results?,errorMsg:String) {
        guard mysql.selectDatabase(named:mysql_database) else {
            //指定操作的数据库
            let msg = "未找到\(mysql_database)数据库"
            print(msg)
            return(false, nil, msg)
        }
        
        let successQuery = mysql.query(statement:sql) //sql语句
        guard successQuery else{
            let msg = "SQL失败:\(sql)"
            print(msg)
            return(false, nil, msg)
        }
        let msg = "SQL成功:\(sql)"
        print(msg)
        return (true, mysql.storeResults(), msg)                            //sql执行成功
    }
    
    /// 增
    ///
    /// - Parameters:
    ///   - tableName: 表
    ///   - keyValueDict: 键:值 对字典
    func insertDataBaseSQL(tableName:String, keyValueDict:Dictionary<String, Any>) -> (success: Bool, mysqlResult: MySQL.Results?, errorMsg: String) {
        var keys: [String] = []
        var values: [String] = []
        for (key, value) in keyValueDict {
            if let str = value as? String {
                keys.append(key)
                values.append(str)
            }
        }
        let fieldNameAll: String = keys.joined(separator: ",")
        let valueAll: String = values.joined(separator: ",")
        let SQL = "insert into \(tableName)(\(fieldNameAll)) values(\(valueAll))"
        return mysqlStatement(SQL)
    }
    
    /// 删
    ///
    /// - Parameters:
    ///   - tableName: 表
    ///   - key: 键
    ///   - value: 值
    func deleteDatabaseSQL(tableName: String, key: String, value: String) -> (success: Bool, mysqlResult: MySQL.Results?, errorMsg: String) {
        
        let SQL = "DELETE FROM \(tableName) WHERE \(key) = '\(value)'"
        return mysqlStatement(SQL)
        
    }
    
    /// 改
    ///
    /// - Parameters:
    ///   - tableName: 表
    ///   - keyValue: 键值对( 键='值', 键='值', 键='值' )
    ///   - whereKey: 查找key
    ///   - whereValue: 查找value
    func updateDatabaseSQL(tableName: String, keyValue: String, whereKey: String, whereValue: String) -> (success: Bool, mysqlResult: MySQL.Results?, errorMsg: String) {
        
        let SQL = "UPDATE \(tableName) SET \(keyValue) WHERE \(whereKey) = '\(whereValue)'"
        return mysqlStatement(SQL)
        
    }
    
    /// 查所有
    ///
    /// - Parameters:
    ///   - tableName: 表
    ///   - key: 键
    func selectAllDatabaseSQL(tableName: String) -> (success: Bool, mysqlResult: MySQL.Results?, errorMsg: String) {
        
        let SQL = "SELECT * FROM \(tableName)"
        return mysqlStatement(SQL)
        
    }
    
    /// 查
    ///
    /// - Parameters:
    ///   - tableName: 表
    ///   - keyValue: 键值对
    func selectAllDataBaseSQLwhere(tableName: String, keyValue: String) -> (success: Bool, mysqlResult: MySQL.Results?, errorMsg: String) {
        
        let SQL = "SELECT * FROM \(tableName) WHERE \(keyValue)"
        return mysqlStatement(SQL)
        
    }
    
    //获取表中所有数据
    func mysqlGetHomeDataResult() -> [Dictionary<String, String>]? {
        let result = selectAllDatabaseSQL(tableName: userTable)
        var resultArray = [Dictionary<String, String>]()
        var dic = [String:String]()
        result.mysqlResult?.forEachRow(callback: { (row) in
            dic["userid"] = row[0]
            dic["userNumber"] = row[1]
            dic["userName"] = row[2]
            dic["userSex"] = row[3]
            dic["userBirthday"] = row[4]
            resultArray.append(dic)
        })
        return resultArray
        
    }
}

然后在NetworkServerManager中调用DataBaseManager,注册子路由/selectUserInfor查询用户表里的所以信息;

    //MARK: 注册路由
    fileprivate func configure(routes: inout Routes,method: HTTPMethod) {
        routes.add(method: .get, uri: "/selectUserInfor") { (request, response) in
            let path = request.path
            print(path)
//            let jsonDic = ["hello": "world"]
//            let jsonString = self.baseResponseBodyJSONData(code: 200, message: "成功", data: jsonDic)
//            response.setBody(string: jsonString)                           //响应体
//            response.completed()                                           //响应
            let queryParams = request.queryParams
            if queryParams.count == 0{
                let result = DataBaseManager().mysqlGetHomeDataResult()
                let jsonString = self.baseResponseBodyJSONData(code: 200, message: "成功", data: result)
                response.setBody(string: jsonString)
                response.completed()
            }else{
                //有参数
                //let value : String
                for i in 0...queryParams.count - 1{
                    let partArr = queryParams[i]
                    print(partArr)
                }
                let jsonString = self.baseResponseBodyJSONData(code: 200, message: "成功", data: nil)
                response.setBody(string: jsonString)
                response.completed()
            }
        }
    }
    
然后调取接口访问数据http://0.0.0.0:8080/api/selectUserInfor;如下图:


注意事项

1.如果你在NetworkServerManager中无法调用DataBaseManager,或者说调用DataBaseManager查找不到,那是因为你创建DataBaseManager的时候没有选择在项目中引用,默认选择了第一个第三方库了;


如果你创建完成只需要稍微修改一下就好;


2.如果提示MySQL找不到,那是因为你的工程中,或者我们开始下载的那个示例工程没有导入MySQL,你需要引用一下就好;

首先修改Package.swift文件,引用https://github.com/PerfectlySoft/Perfect-MySQL.git 

示例如下:

import PackageDescription

let package = Package(
    name: "PerfectTemplate",
    targets: [],
    dependencies: [
        .Package(url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git", majorVersion: 3),
        .Package(url: "https://github.com/PerfectlySoft/Perfect-MySQL.git", majorVersion: 2),
    ]
)
然后删除PerfectTemplate.xcodeproj文件, 接着终端重新生成PerfectTemplate.xcodeproj文件,最后打开工程就会发现MySQL库了,如下图:


DEMO下载

结束语

欢迎大家加移动开发技术交流群,在这里大家可以一起讨论学习,这里有大佬,也有小菜鸟,没事还能斗斗图装装逼,如果需要换工作的还能相互推荐,期待大家的加入!大笑偷笑


                                                             

                












2017-01-03 19:04:26 pj386960300 阅读数 4525
1、使用UIAlertView:

 override func viewDidLoad() {

        super.viewDidLoad()

        self.view.backgroundColor = UIColor.whiteColor()

        var showAlertBtn = UIButton(frame: CGRectMake(10, 50, 150, 20))

        showAlertBtn.backgroundColor = UIColor(red: 1.0, green: 0.6, blue: 0.2, alpha: 1.0)

        showAlertBtn.setTitle("ShowAlertView", forState: UIControlState.Normal)

        showAlertBtn.addTarget(self, action: "showAlert", forControlEvents: UIControlEvents.TouchUpInside)

        self.view.addSubview(showAlertBtn)

    }

  

    func showAlert(){

        var alert = UIAlertView(title: "提示", message: "小心身后", delegate: self, cancelButtonTitle: "确定")

        alert.alertViewStyle = UIAlertViewStyle.Default

        alert.show()

    }

swift学习之弹出提示框的几种方式 - 1015507827 - 丁MCswift学习之弹出提示框的几种方式 - 1015507827 - 丁MC
  
阅读(1771)| 评论(0)
2017-01-09 22:39:35 brycegao321 阅读数 3676

toast.gif

本文要实现Android的toast效果, 同理实现loading框, 包括模态和非模态(即是否拦截控件的焦点)。 

1、 因为toast文字有长有短, 所有要动态判断toast文字的宽度。

extension UILabel {
//根据最大宽度计算高
func getLableSize(text: String, maxWidth: CGFloat) -> CGRect {
let maxSize = CGSize(width: maxWidth, height: 0) //注意高度是0
// size = text.boundingRectWithSize(size2, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: attributes , context: nil);
let size = text.boundingRect(with: maxSize, options: .usesLineFragmentOrigin,
attributes: [NSFontAttributeName:self.font], context: nil)
return size
}
}

2、 按钮的点击事件:

    @IBAction func clickButton2( sender: Any) {
let toast = ToastView()
toast.showLoadingDlg()
}
@IBAction func clickButton3(
sender: Any) {
let toast = ToastView()
toast.showToast(text: "网络连接异常,请稍候再试", pos: .Bottom)
}
@IBAction func showToastTop( sender: Any) {
let toast = ToastView()
toast.showToast(text: "您的申请已受理,请耐心等待", pos: .Top)
}
@IBAction func showNoModal(
sender: Any) {
let toast = ToastView()
toast.showToastExt(text: "非模态toast", pos: .Bottom)
}

3、以显示loading为例讲解语法, 注意模态和非模态是根据window大小决定的。 如果window的大小跟应用根窗口大小一样, 那么就是模态, 反之是非模态。

 func showLoadingDlg() {
let rootRect = UIApplication.shared.windows.first?.frame //应用屏幕大小
let container = UIView() //全屏且透明,盖在最上面, 可以自定义点击事件, 从而实现模态和非模态框效果。
container.backgroundColor = UIColor.clear
container.frame = rootRect!
//添加中间矩形黑色区域, 80*80
let bgLength = 90
let bgView = UIView() //黑色半透明方形区域
bgView.frame = CGRect(x: Int((rootRect?.width)!/2) - bgLength/2,
y: Int((rootRect?.height)!/2) - bgLength/2,
width: bgLength,
height: bgLength)
bgView.layer.cornerRadius = 10 //黑色矩形区域的角弧度
bgView.backgroundColor = UIColor(hue: 0, saturation: 0, brightness: 0, alpha: 0.8)
container.addSubview(bgView) //全屏透明背景在中心位置添加矩形黑色区域
//添加圈圈
let indicatorLength: CGFloat = 50 //黑色矩形区域里的旋转
let indicatorView = UIActivityIndicatorView(activityIndicatorStyle: .white)
indicatorView.frame = CGRect(x: (rootRect?.width)!/2 - indicatorLength/2,
y: (rootRect?.height)!/2 - indicatorLength/2 - 10,
width: indicatorLength,
height: indicatorLength)
indicatorView.startAnimating() //动画
container.addSubview(indicatorView) //添加旋转动画view
//添加文字
let lableX = (rootRect?.width)!/2 - CGFloat(bgLength/2) + 5
let lableY = (rootRect?.height)!/2 + indicatorLength/2 - 10
let lableView = UILabel(frame: CGRect(x: Int(lableX),
y: Int(lableY),
width: bgLength-10,
height: bgLength/2-Int(indicatorLength)/2-5))
lableView.font = UIFont.systemFont(ofSize: 15) //设置系统字体和字号
lableView.textColor = UIColor.white
lableView.text = "加载中"
lableView.textAlignment = .center
container.addSubview(lableView)
//-------------测试代码-------------
//let size = lableView.getLableSize(text: "网络异常,请稍候再试", maxWidth: 100)
//-------------测试代码-------------
let window = UIWindow()
window.backgroundColor = UIColor.clear
window.frame = rootRect! //全屏大小
window.center = CGPoint(x: (rootRect?.width)!/2, y: (rootRect?.height)!/2)
window.windowLevel = UIWindowLevelAlert
window.isHidden = false
window.addSubview(container)
//添加点击事件
container.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapGesture(sender:))))
bufWindows.append(window)
perform(#selector(showFinished(sender:)), with: window, afterDelay: delay)
}

4、toast和loading框都是window, 可以动态关闭, 就像gif图里演示的那样点击window所在区域就可以关闭。

    //添加点击事件
func tapGesture(sender: UITapGestureRecognizer) {
print("点击uiview")
//移除最后一个
if bufWindows.count > 0 {
bufWindows.removeLast()
}
NSObject.cancelPreviousPerformRequests(withTarget: self) //可以关闭window, 如果注释该语句则相当于盖住了一层透明界面
}

代码: https://github.com/brycegao/SwiftToast


2016-04-23 16:49:46 xingyun1992 阅读数 4341

做实际项目总是离不开这两步,大多数情况下都是采用第三方框架来辅助完成,swift也不例外,由于swift并不成熟,用swift语言写的第三方框架很不稳定(苹果更新太快了),所幸swift和oc可以混编,所以本次使用的框架都是oc里面常用的。网络请求使用AFNetworking,json解析使用MJExtension。
下面开始正文:

1. swift中使用oc框架

其原理很简单,需要一个.h头文件,里面导入我们需要使用的oc框架的头文件,把这个.h文件配置到项目设置中即可

1).我们采取一个不容易出错的方法来创建.h文件,在swift项目中新建oc类

这里写图片描述

注意语言选择oc语言,创建完后,xcode会有这么一个提示

这里写图片描述

询问是否创建一个桥街头,这波很关键,点创建
这里写图片描述

如图,创建完后在项目设置那里会有配置这个文件的,如果自己创建自己配置,很容易把路径写错~
接下来测试一下我们是否配置正确
在前面创建的test类中写一个方法,并且在swift中调用

这里写图片描述

这里写图片描述

在上面的桥街头文件中导入test.h (很关键!)
这里写图片描述

在swift中调用测试
这里写图片描述

一般会高亮并且能自动提示就没啥子问题了、

2. 引入第三方框架并调用

这里就很简单了,直接把代码拷贝进来,导入头文件就行了

这里写图片描述

并且在桥街头文件中导入框架包

#import "AFNetworking.h"
#import "MJExtension.h"

至于框架的使用方法,我就不再赘述,官方文档写的很清楚了、

 let manager = AFHTTPSessionManager()
        let url = "http://op.juhe.cn/onebox/weather/query?cityname=%e6%b7%b1%e5%9c%b3&key=eb08f814be6e473ec5ad9a6bde57e5e5&dtype=json"

        manager.GET(url, parameters: nil, success: { ( datatask :NSURLSessionDataTask, object :AnyObject?) in
            NSLog("请求成功")            
        },failure: { (datask, object) in
            NSLog("请求失败%@",object)
        })

还有一个要注意的,在高版本的xcode中,不允许使用http请求(只允许HTTPS),需要在项目的plist文件中加入这么一段

<key>NSAppTransportSecurity</key><dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/></dict>

测试一下,如果上述配置正确的话,是能够打印请求成功的~

3.请求成功后的数据解析
看回调方法上,object就是返回的数据,但是他是一个anyobject类型,就相当于oc里面的id类型(任意类型),实测返回的是一个字典类型,倘若你想打印出来,需要先强转成字典(oc里面可以直接打印)

let dict : NSDictionary = object as! NSDictionary
            NSLog("%@", dict)

框架已经帮我们转成字典类型了,现在要做的就是字典转模型了

4.复杂json解析&模型的写法

上面我们已经取到了字典了,其实已经可以利用系统的方法来字典转模型,但是对于比较复杂的json数据,系统的方法还是需要让我们写很多的代码~
这次用来测试的json数据是天气预报的,放出接口文档,上面有返回的json示例,如果你把上面的字典打印出来了,你也将看到大致结构

模型类

class WeatherBean: NSObject {

    var reason : String!
    var error_code : NSNumber!
    var result : Result!


    class Result: NSObject {
        var data:Data!
    }

    class Data: NSObject {
        var realtime:Realtime!
        var life:Life!
        var weather:Array<Weather2>!
        var pm25:Pm25!
        var date : String!
        var isForeign : NSNumber!

    }

    class Realtime: NSObject {
        var city_code:String!
        var city_name:String!
        var date:String!
        var time:String!
        var week:NSNumber!
        var moon:String!
        var dataUptime:NSNumber!
        var weather:Weather!
        var wind:Wind!

    }

    class Weather: NSObject {
        var temperature:String!
        var humidity:String!
        var info:String!
        var img:String!
    }

    class Wind: NSObject {
        var direct:String!
        var power:String!
        var offset:String!
        var windspeed:String!
    }

    class Life: NSObject {
        var data:String!
        var info:Info!
    }
    class Info: NSObject {
        var chuanyi:Array<String>!
        var ganmao:Array<String>!
        var kongtiao:Array<String>!
        var wuran:Array<String>!
        var xiche:Array<String>!
        var yundong:Array<String>!
        var ziwaixian:Array<String>!
    }

    class Weather2: NSObject {
        var date:String!
        var info:Info2!
        var week:String!
        var nongli:String!

        class Info2: NSObject {
            var day:Array<String>!
            var night:Array<String>!
        }

    }

    class Pm25: NSObject {

        var show_desc:String!
        var pm25:Pm252!
        var dateTime:String!
        var key:String!
        var cityName:String!

        class Pm252: NSObject {
            var pm25:String!
            var curPm:String!
            var pm10:String!
            var level:String!
            var quality:String!
            var des:String!

        }


    }


}

最深大概4-5层,算的上是很复杂的了~

Java的小伙伴一定都用过gson,其实mj解析和这个非常像,模型类的写法都一致

 manager.GET(url, parameters: nil, success: { ( datatask :NSURLSessionDataTask, object :AnyObject?) in

            let weat = WeatherBean.mj_objectWithKeyValues(object)
            NSLog("请求成功"+weat.reason+weat.result.data.pm25.cityName)


        },failure: { (datask, object) in
            NSLog("请求失败%@",object)
        })

如此便能解析到所有的数据~

打个断点,可以看到更多数据哦
这里写图片描述

完~