单例中静态属性的额外作用

2017-01-10
阅读 2 分钟
2.4k
Laptopmini 给我留言道:「是否可以为单例 (singleton) 的共享实例 (shared instance) 定义一个 get 闭包呢?我现在正在编写一个网络 socket 管理器,我希望在每次调用 connect() 的时候都能够匹配到这个实例」。

在 iOS 的 SQLite 数据库中应用 FMDB 库

2017-01-09
阅读 24 分钟
2.2k
在一款应用中,操作数据库和处理数据通常都是一个重要而且关键的部分。几个月前我所写的一篇文章曾经谈到过这个话题,那篇文章讲解了如何使用 SwiftyDB 来管理 SQLite 数据库。我今天再来探讨数据库的话题,不过这次我要介绍另一个你可能已经知道的库:FMDB。

新手教程:如何改变应用名称

2017-01-06
阅读 2 分钟
2.5k
通常情况下,iPhone 屏幕首页上会展示 App 的默认名称。但有时候,我们需更改此名称。在本节教程中,我们会借助属性列表项(property list item)来改变 App 的展示名称。本节教程使用的是 Xcode 7.3.1 和 iOS 9.3。

通过 Core Graphics 绘制渐变颜色

2017-01-05
阅读 3 分钟
3.3k
Core Graphics 是一套非常强大的底层 API 接口集合。在这篇教程中,我们将借助 Core Graphics 来创建渐变颜色。出于简便起见,我们将创建线性渐变 (linear gradients)。所谓线性渐变,是从一个点到另外一个点颜色过渡的描述。我们将会创建一个从左向右渐变的视图。该教程的实验环境是 Xcode 8 和 iOS 10。

iOS 10 本地通知教程

2017-01-04
阅读 3 分钟
3.7k
当用户没有在前台使用某 App 的时候,通过本地通知(Local Notification)可以将消息推送给用户。iOS 10 里苹果公司引入了多信息通知 (rich notifications),其中可以包含不同类型的媒体内容。在本节教程中,我们将创建一个本地通知,其中包含了一个图片消息。本节教程使用的是 Xcode 8 和 iOS 10。

趣谈 iOS 10 UIKit 绘图

2017-01-03
阅读 4 分钟
2.9k
我花费了几天时间用来尝试 iOS 10 中 UIGraphics 类中对于图片和 PDF 中的渲染功能。感觉很有意思。这次我来分享一下这个功能,并且将其与旧的版本对比一下。

如何阅读 Swift 标准库中的源码

2016-12-30
阅读 4 分钟
2.5k
在进行完 GYP 预处理后,阅读 Swift 标准库源码的最简单的一种方式是执行一次完整的 Swift 编译。(另一种是写一小段 shell 脚本。可以看下面的更新)

自定义 Tab Bar 教程

2016-12-29
阅读 2 分钟
2.8k
Tab Bar 用于快速切换不同模块之间的界面。在本节教程中,我们将来了解 Tab Bar 以及如何自定义 item。本节教程将使用 Xcode 8 和 iOS 10 来进行构建。

计时器教程

2016-12-28
阅读 4 分钟
3.1k
作者:Arthur Knopper,原文链接,原文日期:2016-10-31译者:Crystal Sun;校对:星夜暮晨;定稿:CMB 本节教程讲述如何创建一个简单的计时器,其功能有开始、暂停和重置归零。本节教程将使用 Xcode 8 和 iOS 10 来进行构建。 打开 Xcode,创建一个 Single View Application。 点击 Next,product name 一栏填写 IOS10S...

混合构造器

2016-12-27
阅读 2 分钟
2.2k
今天的内容非常简单,但是有些内容会让人产生困扰,通常出现在 extensions 的上下文或者和 RawRepresentable 的枚举值打交道的时候。

Swift 集合的 reduce 操作

2016-12-26
阅读 2 分钟
2.2k
一位朋友问我:「在对集合执行 reduce 操作的时候,是否有比 .reduce(Set<String>()) { $0.union(CollectionOfOne($1)) } 更好的方法?」。这位朋友需要从一个外部数据源中获取相关的数据结果,然后将其填充到集合里。

泛型范围的用法

2016-12-23
阅读 3 分钟
2k
我在前面的文章中提到过,Swift 中有两个基础的区间(Range)类型:Range 和 ClosedRange,并且这两个类型不能互相转换。这使得编写一个同时适用于两种区间类型的函数变得很困难。

Segmented Control 教程

2016-12-22
阅读 3 分钟
2k
Segmented Control 用于展示一些用户可以选择的选项。每个 Segment 看起来像是一个单选按钮 (radio button),用户即便选中了某个选项,这个 Segment 仍保持“选中”状态。在本节教程里,我们会在 UISegmentedController 当中创建两个 Segment,每个 Segment 会让 Label 显示不同的文本内容。本节教程将使用 Xcode 8 和 iOS...

try? 与 as? 之间的优先级问题

2016-12-21
阅读 1 分钟
1.7k
作者:Erica Sadun,原文链接,原文日期:2016-12-15译者:星夜暮晨;校对:Crystal Sun;定稿:CMB Tim Vermeulen 最近在 Swift Evolution 列表上,写到 try? 的优先级非常地出人意料: {代码...} 具体来说,他发现 try? 的优先级比 as? 的优先级低,所以需要添加括号,才能够获取正确的结果。 {代码...} 此外,他还发...

如何把字符串数组从 Swift 传递给 C

2016-12-20
阅读 6 分钟
3.6k
Swift 允许我们将原生的字符串直接传递给一个接受 C String(即 char *)的 C API。 比如说,你可以在 Swift 里调用 strlen 函数,如下所示:

如何重用 watchOS 的 Paging Interface Controller

2016-12-19
阅读 3 分钟
2.5k
目前为止,watchOS 的复用性都不是很好。即使每个界面都差不多,你也不得不在 storyboard 中把所有 Interface Controller 拖出来,就像下面这个 Italian Food 应用一样:

Swift 圣战:使用选项集时的中括号去留

2016-12-16
阅读 2 分钟
1.8k
目前的 OptionSets 是通过协议的方式来实现的,从而使得未来相关 API 的持续演进成为可能。正如 Joe Groff 所指出:开发者可以将单个选项分解为多个精简的选项,与此同时仍然保留提供原始选项的能力。您可以在下面的例子当中看到相应的实现,其组合出了 energyStar 和 gentleStar 选项,而它们与那些使用移位标志 (bit-s...

基于 Swift 创建 CocoaPods 完全指南

2016-12-15
阅读 8 分钟
5.5k
试想一下,有人开发了一个足以改变游戏规则、且具有划时代意义的库,并想把它分享给这个世界。这时候该怎么办?长话短说,我要说的是你需要知道如何发布自己的 CocoaPod!

教程:使用手势来拖动视图

2016-12-14
阅读 3 分钟
3.6k
iOS 的优势在于可以触摸和手势交互。在本节教程中,我们会展示一些借助拖曳手势识别器 (pan gesture recognizer) 来进行拖拽的自定义视图 (views),本节教程使用 Xcode 8 和 iOS 10。

Swift 和 C 不得不说的故事

2016-12-13
阅读 19 分钟
3.5k
从 Swift 开源到现在,只有短短的几个月时间,Swift 却已经被移植到了许多新的平台上,还有一些新的项目已经使用了 Swift。这类移植,每个月都在发生着。

Swift 圣战:注释不是反模式

2016-12-12
阅读 2 分钟
1.5k
昨天,一位名叫安德鲁·华纳的开发者撰写的这篇文章引起了一些争论。文章标题“警惕注释的‘塞壬之歌’”(译者注:塞壬是希腊神话中的海妖,她的歌声极具迷惑性,会引起海啸等灾难)暗示了开发人员在自欺欺人,因为注释会降低代码的质量:

Emoji 上的 Swift:换一种视角来理解 Swift 高阶函数

2016-12-09
阅读 2 分钟
3.5k
作者:Erica Sadun,原文链接,原文日期:2016-11-08译者:星夜暮晨;校对:Crystal Sun;定稿:CMB 不久之前,Iain Delaney 给我发了这一幅图: 这幅由 Steve Luscher 设计的图,其内容来源于 Joey Devilla 的博客 Global Nerdy 中的一篇文章。我觉得这种做法相当有才,让人眼前一亮。 然而,这幅图不是用 Swift 编写的...

Swift 圣战:干净的命名空间

2016-12-08
阅读 2 分钟
2k
sssilver 留言说:「我发现我司的代码普遍都是这种情况:每个类都包含了一堆的静态方法。我问同事为什么不直接编写方法,他们回答说是不想污染命名空间。在类似 Rust 之类的语言当中,所有内容都位于模块内部。那么在 Swift 当中常见的做法是如何呢?」

基于点阵图来构建 Bezier 路径

2016-12-07
阅读 2 分钟
2.4k
我现在正在努力地编写那本关于 UIKit / Quartz 的书,书中描述了很多使用 Bezier 路径绘图的案例。今天,在进行了一天忙碌的写作之后,我现在决定好好休息、放松一下。

亮剑吧!枚举哈希值及选项集

2016-12-06
阅读 2 分钟
2.3k
最近几天,我在 Swift 用户列表中参与了一个讨论,主题是怎样才能更好滴将包含字符串值的 JSON 数组转换为枚举集 (Enumeration Set)。我半开玩笑地建议:这些字符串值应该被转换到基于字符串的枚举当中,然后这些值的 hashValues 将用于设置标志位(flags)。

快捷之道:轻松地使用 DispatchTime

2016-12-05
阅读 1 分钟
5k
这是篇拆开即食的福利小短文。我发现 DispatchTime 使用起来没有想象中便利。在一款 GUI 的应用中,我总是想要指定一个 TimeInterval,也就是以秒为单位的整数或者分数形式。

Defer; defer; defer

2016-12-01
阅读 1 分钟
1.8k
有人问到关于 defer 的用法,以及 defer 语句被添加到栈里面的顺序。这可以很简单的创建一个类似于这样的测试集,然后你就可以自己观察他们的行为。

Swift 3 中的 GCD 与 Dispatch Queue

2016-11-30
阅读 12 分钟
4.2k
串行执行以及伪多线程都已经成为了历史,如果你经历过老式电脑的时代,又或者你接触过搭载着旧操作系统的旧电脑,你就能轻易明白我的话。但是,不管 CPU 拥有多少个核心,不管它有多么强大,开发者如果不好好利用这些优势 ,那就没有任何意义。这时就需要使用到多线程以及多任务编程了。开发者不仅可以,而且必须要好好...

Swift:类型转换

2016-11-29
阅读 6 分钟
2.3k
作者:Andyy Hope,原文链接,原文日期:2016-08-17译者:Cwift;校对:冬瓜;定稿:CMB 每隔一段时间,你都会遇到一些像独角兽一般前沿的情况,迫使你挑战你在当前的时代与领域内所积累的一切知识。而就在刚才我成为了这种情况的受害者。 在汉语中,“危机”一词由两个字符组成, 一个代表危险,另一个代表机会。— 约翰·...

Swift 的 falsiness

2016-11-23
阅读 3 分钟
2.5k
在 Python 中,零和 None,以及空列表、字典和字符串,都有 falsy 值。 如果有 falsy 值,意味着可以它在 if 语句中使用,且可以使用 else。 例如,在 Python 中: