10个你必须知道的ios框架
你好,iOS 开发者们!我的名字叫 Pawe?,我是一个独立 iOS 开发者,并且是 Enter Universe 的作者。
接近两年前我发布了iOS开源库,让你的开发坐上火箭吧。这是我在这里最棒的文章了(根据 Medium 用户的反馈来看):
如果有 15.5 万人 很担心能否跨越网络上连山排海般的文字找到最棒的 iOS 开源库,那我来传递。
可以看一下我的 GitHub 主页,在这篇文章之后又星了超过 180 个 repositories,所以是时候更新我的 Medium 了。
1. IGListKit 作者是 Instagram Engineering
Instagram 程序员做的,IGListKit 是数据驱动的 UICollectionView 框架,为了构建快速和可扩展的列表。另外,它有助于你在 app 结束对于大量视图控制器的使用。看看这篇来自 Ray Wenderlich 的教程,关于如何在项目中实现这个库,或者读读这篇 Rodrigo Cavalcante 的文章,关于迁移现有的 UITableView 到 IGListCollectionView。
Instagram/IGListKit - 为了构建快速和可扩展的列表而生的数据驱动 UICollectionView 框架
2. Realm 作者是 realm.io
Realm 是一个直接运行在手机、平板和可穿戴设备内部的移动端数据库,不只是 iOS。如果你想试一点和 Core Data 不一样的,就用 Realm。许多人说它是一个现代化的、产品已经可以替代苹果原生的解决方案。
realm/realm-cocoa - Realm 是一个移动端数据库:Core Data 和 SQLite 的替代品
3. Moya 作者是 Ash Furrow
Moya 是你的 app 中缺失的网络层。不用再去想在哪儿(或者如何)安放网络请求,Moya 替你管理。
Moya/Moya - 用 Swift 写的网络抽象层
4. SwiftyJSON 作者是 Pinglin Tang
Swift 界 JSON 解析之王。
把这段代码:
1 | 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} |
变成了这段:
1 2 3 4 | let json = JSON(data: dataFromNetworking) if let userName = json[0][ "user" ][ "name" ].string { // Now you got your value } |
自动替你完成了可选值的拆包。
SwiftyJSON/SwiftyJSON - 在 Swift 里处理 JSON 更好的方式
5. Valet 作者是 Square
Valet 允许你安全的在 iOS 或 OS X 钥匙链中存储数据,而不需要掌握任何钥匙链如何工作的知识。它支持在一台设备的多个应用(同一个开发者)间分享数据,以及在一个应用中在多个设备间利用 iCloud 进行分享。支持 Touch ID?没问题。
square/Valet - Valet 可以让你安全地在 iOS 或 OS X 钥匙链中存储数据,而不需要掌握任何钥匙链工作的知识。它…
6. Firebase Analytics 作者是 Google Developers
由谷歌制作(好吧,收购),应该是 iOS 最好的免费分析解决方案。追踪 app 使用量、用户活跃度、以及事件;设置用户属性;创建自定义受众;还有更多。
Firebase Analytics | Firebase - Firebase Analytics 是一个免费 app 监测解决方案,洞察 app 用量和用户活跃度
7. AsyncDisplayKit
Facebook 为他们的 app Paper 创造了这个异步 UI SDK。如果你想让你的 app 总是每秒用 60 帧的速度来渲染,一定要看看这个库。这儿有一篇来自 Buffer 团队的故事:
Buffer 里 iOS 的平滑滚动:如何(以及为什么)我们实现了 AsyncDisplayKit - 每年苹果的 WWDC 结束后,我们都会把最多的注意力转换到更新我们的 Buffer…
facebook/AsyncDisplayKit - iOS app 的平滑异步用户界面。
8. DZNEmptyDataSet
用户安装了你的 app 之后,就会看见一个空白的 UITableView。
DZNEmptyDataSet 帮助你避免这个情况,它提供了 Empty Data Set Pattern 的默认实现。
dzenbot/DZNEmptyDataSet - 嵌入式 UITableView/UICollectionView 的父类类别,用于显示空的数据集,无论何时…
9. Chameleon 作者是 Vicc Alexander
Chameleon 是一个轻量、又强大的 iOS 颜色框架。它基于“软件应用程序应该轻松地实现功能,同时保持漂亮的界面”这个想法而创建。
有了 Chameleon,你就不再需要捣鼓 RGB 值、浪费时间搞明白 app 里正确的颜色组合、以及为文本能否在 app 里不同的背景下可以被看见而烦恼。
ViccAlexander/Chameleon - iOS 的扁平颜色框架(Obj-C 和 Swift)
10. PermissionScope 作者是 Nick O’Neill
PermissionScope 是一个 Swift 框架,为了向用户巧妙地请求权限。它不只包含简单的权限请求 UI,还有统一的权限 API 可以告诉你任意给定的系统权限的状态,当然也可以轻松地请求它们。
nickoneill/PermissionScope - 巧妙的 iOS 权限 UI 和 统一 API
以上就是ios开发必须了解的框架的全部内容了,感谢大家的阅读!
相关文章:

生成N个不相等的随机数
近期项目中须要生成N个不相等的随机数。实现的时候。赶工期,又有项目中N非常小(0-100)直接谢了一个最直观的方法: public static List<Integer> randomSet(int num,int threshold){Random random new Random();if(num > threshold) return null;Set<In…

kafka streams_如何使用Kafka Streams实施更改数据捕获
kafka streamsChange Data Capture (CDC) involves observing the changes happening in a database and making them available in a form that can be exploited by other systems. 更改数据捕获 (CDC)涉及观察数据库中发生的更改,并将其以可被其他系统利用的形式…

iOS超全开源框架、项目和学习资料汇总(1)UI篇
上下拉刷新控件**1. ** MJRefresh --仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能。可以自定义上下拉刷新的文字说明。(推荐)**2. ** SVPullToRefresh --下拉刷新控件4500star,值得信赖**3. ** CBStoreHo…

day16 递归函数
一、递归 函数 为什么要有函数,提高代码的可读性,避免重复的代码,提高代码的复用性 在函数中能用return的不要print 1、递归的最大深度997 def foo(n):print(n)n1foo(n) foo(1) 递归的最大深度2、修改递归的最大深度 由此我们可以看出&#x…

设计模式之笔记--抽象工厂模式(Abstract Factory)
抽象工厂模式(Abstract Factory) 定义 抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 类图 描述 多个抽象产品类,每个抽象产品类可以派…

用户体验改善案例_如何检测用户的设备,以便改善他们的用户体验
用户体验改善案例A few months ago I watched a great talk from the Chrome Dev Summit about performance in slow devices.几个月前,我观看了Chrome开发者峰会上有关慢速设备性能的精彩演讲。 It blew my mind all the work done by Facebook in identifying de…

【如何快速的开发一个完整的iOS直播app】(采集篇)
前言在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇)开发一款直播app,首先需要采集主播的视频和音频,然后传入流媒体服务器,本篇主要讲解如何采集主播的视频和音频&am…

easyui 报表合并单元格
前段时间工作中碰到有需求,要求数据按下图所示格式来显示,当时在园子里看到了一篇文章(时间久了,想不起是哪一篇),研究了后做出了如下的DEMO,在此当作学习笔记,简单记录一下。 首先是…

HDU2594 KMP next数组的应用
这道题就是给你两个串s1, s2让你求出s1 s2的最长相同前缀和后缀, 我们直接将s1 s2连接到一起然后处理一下next数组即可, 注意答案应该是min(len(s1), len(s2) , next[len]), 代码如下: #include <cstdio> #include <cstring> #in…

c语言中浮点数和整数转换_C中的数据类型-整数,浮点数和空隙说明
c语言中浮点数和整数转换C中的数据类型 (Data Types in C) There are several different ways to store data in C, and they are all unique from each other. The types of data that information can be stored as are called data types. C is much less forgiving about d…

【如何快速的开发一个完整的iOS直播app】(美颜篇)
前言在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇)开发一款直播app,美颜功能是很重要的,如果没有美颜功能,可能分分钟钟掉粉千万,本篇主要讲解直播中美颜…

Linux内核分析——第五章 系统调用
第五章 系统调用 5.1 与内核通信 1、系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: (1)为用户空间提供了一种硬件的抽象接口 (2)系统调用保证了系统的稳定和安全 (…

BZOJ 3110
http://www.lydsy.com/JudgeOnline/problem.php?id3110 整体二分区间修改树状数组维护 #include<cstdio> #define FOR(i,s,t) for(register int is;i<t;i) inline int max(int a,int b){return a>b?a:b;} inline int min(int a,int b){return a<b?a:b;} type…

css 选择器 伪元素_CSS伪元素-解释选择器之前和之后
css 选择器 伪元素选择器之前 (Before Selector) The CSS ::before selector can be used to insert content before the content of the selected element or elements. It is used by attaching ::before to the element it is to be used on.CSS ::before选择器可用于在选定…

各种面试题啊1
技术 基础 1.为什么说Objective-C是一门动态的语言? 什么叫动态静态 静态、动态是相对的,这里动态语言指的是不需要在编译时确定所有的东西,在运行时还可以动态的添加变量、方法和类 Objective-C 可以通过Runtime 这个运行时机制,…

PEP8 Python
写在前面 对于代码而言,相比于写,它更多是读的。 pep8 一、代码编排 缩进,4个空格的缩进,编辑器都可以完成此功能;每行最大长度79,换行可以使用反斜杠,换行点要在操作符的后边。类和top-level函…

粒子滤波 应用_如何使用NativeScript开发粒子物联网应用
粒子滤波 应用If youre developing any type of IoT product, inevitably youll need some type of mobile app. While there are easy ways, theyre not for production use.如果您要开发任何类型的物联网产品,则不可避免地需要某种类型的移动应用程序。 尽管有简单…

wkwebView基本使用方法
WKWebView有两个delegate,WKUIDelegate 和 WKNavigationDelegate。WKNavigationDelegate主要处理一些跳转、加载处理操作,WKUIDelegate主要处理JS脚本,确认框,警告框等。因此WKNavigationDelegate更加常用。 比较常用的方法: #p…

引用类型(一):Object类型
对象表示方式 1、第一种方式:使用new操作符后跟Object构造函数 var person new Object();<br/> person.name Nicholas;<br/> person.age 29; 2、对象字面量表示法 var person {name:Nicholas,age:29 } *:在age属性的值29的后面不能添加逗号…

(第四周)要开工了
忙碌的一周又过去了,这周的时间很紧,但是把时间分配的比较均匀,考研复习和各门功课都投入了一定的精力,所以不像前三周一样把大多数时间都花费在了软件工程上。也因为结对项目刚开始,我们刚刚进行任务分工以及查找资料…

统计数字,空白符,制表符_为什么您应该在HTML中使用制表符空间而不是多个非空白空间(nbsp)...
统计数字,空白符,制表符There are a number of ways to insert spaces in HTML. The easiest way is by simply adding spaces or multiple character entities before and after the target text. Of course, that isnt the DRYest method.有多种方法可以在HTML中插入空格。…

Python20-Day02
1、数据 数据为什么要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同类型的数据表示; 数据类型 数字(整形,长整形,浮点型,复数),字符串,列表,元组…

Android网络框架-OkHttp3.0总结
一、概述 OkHttp是Square公司开发的一款服务于android的一个网络框架,主要包含: 一般的get请求一般的post请求基于Http的文件上传文件下载加载图片支持请求回调,直接返回对象、对象集合支持session的保持github地址:https://githu…

第一天写,希望能坚持下去。
该想的都想完了,不该想的似乎也已经尘埃落定了。有些事情,终究不是靠努力或者不努力获得的。顺其自然才是正理。 以前很多次想过要努力,学习一些东西,总是不能成,原因很多: 1.心中烦恼,不想学…

mac gource_如何使用Gource显示项目的时间表
mac gourceThe first time I heard about Gource was in 2013. At the time I watched this cool video showing Ruby on Rails source code evolution:我第一次听说Gource是在2013年 。 当时,我观看了这段很酷的视频,展示了Ruby on Rails源代码的演变&a…

insert语句让我学会的两个MySQL函数
我们要保存数据到数据库,插入数据是必须的,但是在业务中可能会出于某种业务要求,要在数据库中设计唯一索引;这时如果不小心插入一条业务上已经存在同样key的数据时,就会出现异常。 大部分的需求要求我们出现唯一键冲突…

对PInvoke函数函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。...
C#引入外部非托管类库时,有时候会出现“对PInvoke函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配”的报错。 通常在DllImport标签内加入属性CallingConventionCallingConvention.Cdecl即可解决该问题。 如: [Dll…

Python字符串方法用示例解释
字符串查找方法 (String Find Method) There are two options for finding a substring within a string in Python, find() and rfind().在Python中的字符串中有两个选项可以找到子字符串: find()和rfind() 。 Each will return the position that the substring …

关于命名空间namespace
虽然任意合法的PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和traits)、接口、函数和常量。在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句…