Swift 范的 CGRect、CGSize 和 CGPoint

2016-06-16
阅读 3 分钟
3.4k
从我决定拥抱 Swift 到现在已经 8 个月了。这几个月中,我一边学习着如何避免写出 Objective-C 风格的 Swift 代码,一边真正开始使用这门新语言。

在 Xcode 中使用 Markdown 生成 Swift 代码文档

2016-06-15
阅读 10 分钟
4.1k
在 Xcode 7 的所有功能中,有一个很特别:它给编写代码文档提供了一个更好的方法。随着 Xcode 7 的更新,开发者可以使用 Markdown 语法书写富文本格式的代码文档,而且可以结合特定的关键词来指明特殊部分(如参数,函数返回结果等)。作为新支持的 Markdown 文档样式,它具有以下几点优势:文本样式的自定义程度更高,...

WWDC 观后感

2016-06-14
阅读 2 分钟
2.9k
我很喜欢 iOS playgrounds,它为教育机构(如斯坦福)提供了一种比看教程更好的方式。我自己写的 Sherlocked 也可以退休了(译者注:作者影射了新推出的 universal clipboard 抢走了她的饭碗 =。= )。此外,Xcode 开放了源码编辑器的扩展功能,同时也开放了部分 Siri API。

Swift 傻瓜技巧:自定义枚举的映射关系

2016-06-13
阅读 4 分钟
3.7k
在 iOS 平台的 app 中,有种列表设计非常常见: 一个 table view, 里面是一个项目列表,每个项目只有一行简单的文字,对于被选中的项目,后面会有一个对勾。

如何在 Swift 中进行错误处理

2016-06-12
阅读 6 分钟
2.8k
译者注:原文标题为 Let it throw, Let it throw! 是模仿冰雪奇缘的主题曲 Let it go ,并且文章的副标题也在模仿冰雪奇缘的经典台词。

Friday Q&A 2016-01-29: Swift 的结构体存储

2016-06-08
阅读 14 分钟
3.2k
Swift 的类对大多数刚接触编程语言的人来说是很容易理解的,它们和其他语言中的类十分类似。无论你是从 Objective-C、Java 还是 Ruby 过来的,在 Swift 中对于类的使用并无太大区别。而 Swift 中的结构体就是另外一回事儿了,它们有点儿像类,但是它们是值类型,还没有继承,另外我总是听到这个什么 copy-on-write(写入...

为什么 NSLog 不支持 Swift 对象

2016-06-07
阅读 2 分钟
3.3k
Erica,你好,在我想在 Playground 运行以下代码时,编译未通过。错误原因:“error: ‘NSLog’ is unavailable: Variadic function is unavailable NSLog(“%@”, Foo()) Foundation.NSLog:2:13: note: ‘NSLog’ has been explicitly marked unavailable here(错误:'NSLog' 不可用:可变参数函数不支持 NSLog(“%@”, Foo())...

模式匹配第四弹:if case,guard case,for case

2016-06-06
阅读 6 分钟
4k
现在我们来重新回顾下前三弹模式匹配的各种语法 第一弹,第二弹,第三弹,第四弹是本系列的最后一篇文章,本章会教大家使用 if case let,for case where 等一些高级语法,让我们拭目以待吧!

用 Swift 编写面向协议的网络请求

2016-06-03
阅读 5 分钟
2.4k
和我一起参加9 月 1 日 - 9月 2 日在纽约举办的 Swift 社区庆典?吧!使用优惠码 NATASHATHEROBOT 可以获得 $100 的折扣!

Swift:Selector 语法糖

2016-06-02
阅读 3 分钟
3.3k
Objective-C 已经出现好些年了。在这期间,开发者们遵循着各种代码风格,希望能提高可读性,为今后的版本迭代做准备。但是 Swift 不同。Swift 还是门很新的语言,没有专门的或者最广泛的编码风格可以遵循。所以很多时候我们需要自己去摸索。

用 Swift 编写面向协议的视图

2016-06-01
阅读 5 分钟
3.4k
和我一起参加9 月 1 日 - 9月 2 日在纽约举办的 Swift 社区庆典?吧!使用优惠码 NATASHATHEROBOT 可以获得 $100 的折扣!

合理的使用 Swift 中的 final 类

2016-05-31
阅读 1 分钟
1.5k
你上一次在 Swift 中继承一个类是什么时候?而且这个类是你创建的但不是 Cocoa 体系中的一部分。在 protocol 扩展和一般的 extension 扩展存在的情况下,你多久继承一次非 Cocoa 类型的 class ?

Swift 2.0 :揭秘 Map 和 FlatMap

2016-05-30
阅读 6 分钟
4k
Swift 依然是一个有些不稳定的语言,每次发布新版本,都带来新的功能和特性。许多人都已经写了 Swift 的函数的相关内容以及如何用更“纯”的函数式的方法处理问题。

Swift 中的尾递归和蹦床

2016-05-27
阅读 6 分钟
3.2k
通过递归来实现算法往往比基于循环的实现来得更加清晰,但递归的实现会因为每次方法调用的时候都需要分配和管理栈帧而导致额外的开销,这会导致递归的实现很慢而且有可能很快就耗尽了栈空间(也就是栈溢出)。

MVVM 不是那么好

2016-05-26
阅读 3 分钟
3.7k
我写过许多关于让 ViewController 变得更轻量的文章,Model-View-ViewModel 是一种常用的可以实现该目的的设计模式。我觉得 MVVM 是一种反人类的设计模式,它使架构更加混乱而非清晰。View Model的命名很糟糕,它只是架构优化的权宜之计。对我们来说放弃这一模式反而更好。

[2016 版] 常见操作性能对比

2016-05-25
阅读 7 分钟
2.7k
在我开始做 Friday Q&A 之前,我曾发表过一些关于常见操作性能测试的文章,并对结果进行了讨论。最近的一篇是在 2008 年 10 月 5 日,在 10.5 的 Mac 系统和最早的 iPhone 操作系统上。已经好长一段时间没有更新了。

Apple Watch 一年有感

2016-05-24
阅读 4 分钟
4.1k
自从 2015 年 5 月买了 Apple Watch 以后,我每天都戴着。尽管问题不少,但它还是很快就成为了我不可或缺的设备之一。额…主要原因是…或者唯一的原因是…我离不开活动检测功能…

iOS:关于 SwiftWatch

2016-05-20
阅读 2 分钟
1.5k
时过境迁,我发现现在很难在 Swift 社区当中,跟进所有那些让人感到万分兴奋的进展了,虽然我不知道其他人是不是一样的想法。现在社区当中有数以万计出色的 GitHub 项目、价值连城的会议记录、有教育意义的博文、富有洞见的 Twitter 讨论贴以及内容丰富的新闻周刊,您很难对这些新进展保持跟进。更糟的是,Swift 的范围...

使用 Parse 是一个糟糕的主意

2016-05-19
阅读 4 分钟
3.1k
不知道你是否听说,Facebook 要关闭 Parse 了。Parse 是一个后端云服务(BaaS),前不久刚刚被 Facebook 收购。很多开发者感到有些失望,甚至感觉被 Facebook 背叛,我在推特发了这张 Parse 被关闭前网站首页截屏图片,它能说明一切:

如何将 Parse 服务器迁移到 Heroku 或 AWS

2016-05-19
阅读 7 分钟
3.3k
我之前写过这篇文章 Migrating a parse database to a self-host MongoDB instance,在这次的春季辅导教程中,我们看一下如何将 parse 服务器迁移到 Heroku 或 Amazon Web Service。

用 SwiftyDB 管理 SQLite 数据库

2016-05-17
阅读 23 分钟
3k
选择哪种数据持久化的方式,是我们在开发 App 时常常遇到的问题。我们有太多选择了:创建一个单独的文件、使用 CoreData 或者创建 SQLite 数据库。使用 SQLite 数据库有点麻烦,因为首先要先创建数据库,提前写好表和字段。此外,从编程的角度来看,数据的存储、更新、和获取都不是很容易的操作。

“错误”的使用 Swift 中的 Extension

2016-05-16
阅读 10 分钟
2.7k
我大量使用 extension 的主要目的是为了提高代码可读性。以下是我喜欢使用 extension 的场景,尽管 extension 并非是为这些场景设计的。

用 HealthKit 来开发一个健身 App

2016-05-13
阅读 8 分钟
3.3k
看新闻我们也知道,比起历史上任何一个时刻,健身和健康在今天都更加重要。说起来也挺好笑的,我似乎记得几天前新闻也在说同样的事情,也许是因为年纪越来越大的缘故,我更需要健康和健身。不管怎么说,这是一个热门话题。随着技术的不断进步,手机应用和硬件在世界范围内都变得流行起来,这些都给日益流行的健身健康话...

Friday Q&A 2016-03-04:Swift 断言

2016-05-11
阅读 6 分钟
2.2k
断言是一种非常有用的机制,它可以检查代码中的假设部分,确保错误能够被及时发现。今天我将探讨 Swift 中提供的断言调用以及它们的实现,这个话题是由读者 Matthew Young 提出的。

Swift 中的过滤器

2016-05-10
阅读 2 分钟
2.7k
Swift 提供了很多方便的函数来操作数组,比如 filter 和 map。在这篇文章里,我将带大家熟悉一下 filter,以及学习如何使用 map 来组合出新的数组。

Swift 3.0 的自动默认(auto-defaulting)实参

2016-05-09
阅读 2 分钟
2.9k
我最近发布的文章 《准备好迎接 3.0 API 变化》 得到了一些很有趣的反馈。最近发布了一些有关 Swift 3 提议的文章,特别是关于 SE-0005 , 这些文章中解释了在 Swift 中 ObjC APIs 是如何自动转换的,也说明了这些转换在 Swift 中使用 Cocoa 的影响。

度量单位

2016-05-06
阅读 2 分钟
3.2k
我总是觉得对度量单位的建模是一件很有意思的事情。比如说,时间单位,假设你有一个 API 接受一个时间作为参数,可能需要以秒作为单位(又或者是毫秒作为单位)但是,有的时候你有需要以小时为单位来表达时间,例如 2 小时。所以,为了避免魔数(magic number) (7200 两小时转换为秒为单位),你会使用 2 * 60 * 60 ,为...

GCD 使用指南

2016-05-05
阅读 8 分钟
4.1k
Grand Central Dispatch 大中枢派发? 或俗称 GCD 是一件极其强大的武器。它为你提供了很多底层工具(比如队列和信号量),你可以组合这些工具来实现自己想要的多线程效果。不幸的是,这些基于 C 的 API 晦涩难懂,此外将低级工具组合起来实现高抽象层级 API(译者注:类似于 NSOperation)也不是一件容易的事。在这篇文...

使用 Storyboard 和 segue 实现 View Controller 数据注入

2016-05-04
阅读 2 分钟
3.1k
自从我之前在这篇文章中公开表达我对 Storyboard 和 Nib 的热爱之后,就一直有很多人问我如何不用自定义的初始化方法来实现不同的 ViewController 之间的数据传递。现在我来分享一下。

准备好迎接 3.0 API 变化

2016-05-03
阅读 2 分钟
2.1k
这一变化包含在将 Objective-C API 转化成 Swift 的提案 SE-0005 中。由于属性名结尾的单词和属性类型已经包含了足够的信息,因此可以删掉 Color: