Swift42/90Days - 关于 Optional 解包值无用的问题

2015-05-03
阅读 1 分钟
2.9k
在日常开发中,我们经常判断一个对象是否为空,如果不为空则做一些处理。比如程序刚启动,判断下是不是有缓存的账号密码,如果不为空则直接显示程序主页面:

Swift41/90Days - 面向轨道编程 - Swift 中的异常处理

2015-04-21
阅读 6 分钟
3.7k
问题 在开发过程中,异常处理算是比较常见的问题了。 举一个比较常见的例子:用户修改注册的邮箱,大概分为以下几个步骤: 接收到一个用户的请求:我要修改邮箱地址 验证一下请求是否合法,将请求进行格式转化 更新以前的邮箱地址记录 给新的邮箱地址发送验证邮件 将结果返回给用户 上面的步骤如果一切顺利,那代码肯定...

Swift40/90Days - 用函数式编程解决逻辑难题

2015-03-29
阅读 4 分钟
4.9k
Swift90Days - 用函数式编程解决逻辑难题 这篇翻译的文章,用两种方法解决了同一个逻辑难题。第一种方法的编程风格接近大多数 iOS 开发者,实现了指令式编程的解决方案。第二种方法利用了 Swift 的一些语言特性,实现了函数式编程的解决方案。 源代码可以在这里下载:[链接]

Swift39/90Days - 如何实现圆形加载进度条

2015-03-10
阅读 2 分钟
6k
通过自定义一个 UIView 实现了这个红色的加载指示器,上面有一个 CAShapeLayer ,用来显示红色的圆环,圆环部分的关键代码是:

Swift38/90Days - 用 Swift 开发 Mac App 1 / 3

2015-03-10
阅读 2 分钟
4.7k
Swift90Days - 用 Swift 开发 Mac App 1 / 3 今天抽点时间找了篇 Raywenderlich 上的教程入门了一下 Mac App 的开发。 教程的例子是实现一个简单的 TableView ,不过在 Mac 里它叫做 NSTableView 。 用法也和 UITableView 相似,通过 delegate 和 datasource 来加载列表: {代码...} 好吧就这么点了,感兴趣的同学可以看...

Swift37/90Days - iOS 中的设计模式 (Swift 版本) 02

2015-03-01
阅读 22 分钟
6.6k
欢迎来到教程的第二部分!这是本系列教程的最后一部分,在这一章的学习里,我们会更加深入的学习一些 iOS 开发中常见的设计模式:适配器模式 (Adapter),观察者模式 (Observer),备忘录模式 (Memento)。

Swift36/90Days - 状态可变的不可变类型

2015-01-13
阅读 2 分钟
3.3k
函数式编程中有个很重要的概念:不可变。但是在实际的开发过程中,又常常为这三个字所困扰:对象的状态总归是经常要变化的,如何才能既可变又不可变?

Swift35/90Days - iOS 中的设计模式 (Swift 版本) 01

2015-01-11
阅读 14 分钟
10k
说到设计模式,相信大家都不陌生,但是又有多少人知道它背后的真正含义?绝大多数程序员都知道设计模式十分重要,不过关于这个话题的文章却不是很多,开发者们在开发的时候有时也不太在意设计模式方面的内容。

Swift34/90Days - objc.io 的 Swift 片段 5

2014-12-29
阅读 2 分钟
3k
Swift90Days - objc.io 的 Swift 片段 4 全排列 我们想通过 Swift 简单的实现全排列。 首先先写个例子,列出所有把元素插入到数组中的情况: {代码...} 接下来再通过 between 函数实现全排列: {代码...} 其中 >>= 这个符号前面有提到过,返回所有的组合结果。完整的实现代码如下: {代码...} 轻量级解包 我们可以...

Swift33/90Days - objc.io 的 Swift 片段 4

2014-12-26
阅读 1 分钟
2.6k
Swift90Days - objc.io 的 Swift 片段 4 类型封装 比如我们有个这样的函数,计算账户的信誉值: {代码...} 不过在代码里你可能看到 int 类型的结果不知道它是用来描述什么的。所以使用 typealias 就十分有用了: {代码...} 你也可以做的更深入一些: {代码...} 这样有一个好处就是当尝试把这个值和整数直接相加的时候会...

Swift32/90Days - objc.io 的 Swift 片段 3

2014-12-25
阅读 2 分钟
2.4k
Swift90Days - objc.io 的 Swift 片段 3 Reduce reduce 是函数式编程里很常用的操作之一。我们可以用 reduce 封装一个简单的求和函数: {代码...} 一开始看可能有点难以理解,把它补全就是这样的: {代码...} 不仅是整数,Bool 值也是可以的: {代码...} Applicative Functors 假设我们有这样一个登录的函数: {代码...}...

Swift31/90Days - objc.io 的 Swift 片段 2

2014-12-24
阅读 2 分钟
2.5k
结合前面的 decompose 扩展,我们可以分分钟写出一个快排片段。先取出第一个元素作为锚点,然后把后面小于这个数的放到一个数组里,大于这个数的放到另一个数组里:

Swift30/90Days - objc.io 的 Swift 片段 1

2014-12-23
阅读 2 分钟
3.1k
Swift90Days - objc.io 的 Swift 片段 1 objcio 上的文章质量都很高,最近攒了十期,一起看下 Swift 相关的一些小贴士。 分解数组 我们可以通过下面这个扩展给 Array 加上一个分解方法,返回首个元素和剩下的元素组成的元组: {代码...} 比如[1,2,3],就会拆解成 (1,[2,3]) 返回。我们可以用这个扩展写一个求和程序: {...

Swift29/90Days - 通过 UIBezierPath 做一个中空的扫描器

2014-12-22
阅读 3 分钟
7.4k
今天在公司的代码里看到通过 UIBezierPath 绘制 CALayer 然后实现中空的正方形,感觉还挺有意思的,简单记录一下 UIBezierPath 这个东西。

Swift28/90Days - 基于手势的TODO应用 2

2014-12-18
阅读 4 分钟
2.8k
Swift90Days - 基于手势的 TODO 应用 2 接着上面的文章看看这个 TODO 应用的代码,接下来看下 TableViewCell 类。 TableViewCell TableViewCellDelegate 在 Cell 里首先是定义了一个委托,用来对 Cell 进行操作: {代码...} todoItem Cell 的数据来源是这个 todoItem 对象。定义如下: {代码...} 可以看到这个属性在 did...

Swift27/90Days - 基于手势的TODO应用 1

2014-12-17
阅读 2 分钟
2.9k
Swift90Days - 基于手势操作的 TODO 应用 1 推荐下两篇教程: Making a Gesture-Driven To-Do List App Like Clear in Swift: Part 1/2 Making a Gesture-Driven To-Do List App Like Clear in Swift: Part 2/2 Raywenderlich 出品,必属精品。具体教程我就不翻译了,看看源码挑一些内容写写。 UITextField 添加删除线 ...

Swift26/90Days - CABasicAnimation

2014-12-16
阅读 1 分钟
2.7k
Swift90Days - CABasicAnimation CABasicAnimation 的结构如下: NSObject CAAnimation CAPropertyAnimation CABasicAnimation 用起来也挺简单: {代码...} 哈哈哈哈哈就写这么多了,睡觉! References CABasicAnimation Class Reference

Swift25/90Days - 一个二维码扫描器

2014-12-14
阅读 3 分钟
4.3k
在初始化方法里我们需要获取到摄像头。AVCaptureDevice 代表一个真实的物理捕捉设备。AVCaptureSession 则是用来处理实时视屏数据。

Swift24/90Days - 屏幕适配的那些坑

2014-12-13
阅读 2 分钟
4.5k
最近在做 iPhone4 和 iPhone6 及 iPhone6 plus 的适配工作。由于历史原因没有用 AutoLayout ,也由于历史原因老代码的布局全是用数字一个一个写死的。这就给适配带来了莫大的困难。比如下面这段代码:

Swift23/90Days - 滑块的制作

2014-12-13
阅读 3 分钟
2.7k
Swift90Days - 滑块的制作 今天读到以前人写的滑块源码,十分糟糕,直接导致iPhone6下自动挂断的crush让人崩溃。晚上找些开源库看看别人是怎么实现滑块的。 需求 简单的列一下需求: 背景视图是容器,显示可滑动区域 按钮默认在左侧,可以滑动到最右侧,松手之后自动返回最左 最好提示字有动态色彩变化 头文件 项目源码...

Swift22/90Days -侧滑菜单的制作

2014-12-11
阅读 6 分钟
7k
Swift90Days - 侧滑菜单的制作 今天仔细阅读了 How to Create Your Own Slide-Out Navigation Panel in Swift 的源码,感觉收获很大,记录一下。 简单描述 大致的结构是这样: ContainerViewController:其他视图的容器,存放了中间的主视图、左侧的侧滑视图、右侧的策划视图 CenterViewController:主视图,导航栏左右...

Swift21/90Days - 动态变化的 UITableView 头部

2014-12-11
阅读 4 分钟
4.8k
Swift90Days - 动态变化的 UITableView 头部 今天公司的有一个需求是实现动态的 UITableView 头部,基本需求是: 默认状态显示一个 headerView 展示头像。 上推时 headerView 缩小高度,图像逐渐模糊。 下拉时 headerView 的图像相应下移,方便展示全景。 下面先看看开源项目 ParallaxTableViewHeader 的实现方式,和自...

Swift22/90Days - GCD 1

2014-12-09
阅读 2 分钟
2.1k
Swift90Days - GCD 1 最近比较忙啦,就贴一下自己学习时候的关键代码,以后有机会再补上讲述的内容。 dispatch_async 看代码说话: {代码...} 上面的代码可以发送一个自定义的异步请求,然后通过 dispatch_get_main_queue 在主线程里刷新UI。 dispatch_after 比如我们想在1秒之后弹出提示框,可以这样: {代码...} dispa...

Swift21/90Days - GCD 0

2014-12-08
阅读 1 分钟
2k
Swift90Days - GCD 0 (感觉没时间继续写了。。罪过罪过,最近就仓促一点吧。)整理一些概念帮助理解 GCD。 Synchronous vs. Asynchronous 同步和异步关注的是消息通信机制。 同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。 换句话说,就是由调用者主动等待这个...

Swift20/90Days - 类型设计

2014-12-06
阅读 4 分钟
3.1k
今天读的这篇博文,作者是一名 Haskell 程序员,从 Swift 枚举类可以通过 rawValue 来初始化这个特性谈起,提出了一些自己的观点,摘录一部分如下:

Swift19/90Days - 一个简单的小应用 2 / 2

2014-12-05
阅读 3 分钟
2.3k
使用 UIAlerView 弹出视图输入内容,注意设置 style 为 PlainTextInput ,设置 delegate 为 self 。

Swift18/90Days - 一个简单的小应用 1 / 2

2014-12-04
阅读 4 分钟
2.4k
Swift90Days - 一个简单的小应用 1 / 2 第0步:明确任务 经过前面基础语法的学习,我们终于可以真枪实弹的来一发了。以这篇小鸡鸡小猫猫小狗狗为例,我们将会创建一个简单的应用: 通过 UITableView 展示三种小动物 通过 NSUserDefaults 进行数据持久化 通过 UIWebView 从维基百科加载更多数据 由于时间有限,这篇博客并...

Swift17/90Days - 可选类型

2014-12-03
阅读 3 分钟
3k
Swift90Days - 可选类型 (对于可选类型的理解可以参见猫神的这篇行走于 Swift 的世界中,在此整理一些关键的部分。) Optinal Value Swift 中的 Optinal Value 就像是一个盒子,可能装着值,也可能什么都没装。 我们可以用 ? 定义一个可选类型的整数 : {代码...} 可选类型的真实身份其实是 Optional 类型,常用的 ? 是 A...

Swift16/90Days - 公用库和模块化

2014-12-02
阅读 2 分钟
3.7k
公用库和模块化 静态库和动态库 先补充一下静态库和动态库的知识。这部分内容我也不太熟,没有开发经验,如有错误欢迎打脸。 静态库 静态库的代码追加到可执行文件内,被多次使⽤用就有多份冗余拷⻉。 好处就是应用程序包自身可以独立运行,而不好的地方就是包会略显臃肿,库不能共享。 iOS 中静态库的形式是 .a 和 .fra...

Swift15/90Days - 字符串进阶和精子符号

2014-12-01
阅读 4 分钟
3.4k
接下来再看下 String 的 startIndex 和 endIndex 。这两个 index 都是 String.Index 类型的,用来定义字符的位置,它是遵守 BidirectionalIndexType 这个协议的,而这个协议继承自 ForwardIndexType 这个协议,所以它可以作为参数传入。