作者:Mattt,原文链接,原文日期:2018-08-13
译者:Damonwong;校对:LisionYousanflics;定稿:Forelax

当你在苹果商店预约天才吧服务后,相关工作人员会帮你登记并且安排特定的服务时间,在被带到座位上之后,工作人员会记录你的身份信息并添加到服务队列当中。

根据一份来自零售店某位前员工的报告表示,对于顾客的描述有着严格的指导方针。他们的外貌特征如:年龄、性别、种族、身高都没有被使用 —— 甚至连头发的颜色都没有被使用。而是通过顾客的着装来描述,例如“黑色的高领毛衣,牛仔裤和眼镜”。

这种描述顾客的方式和编程中的哈希函数有很多共同之处。同许多优秀的哈希函数一样,它是连续和易计算的,可用于快速找到你正在寻找的内容(或者人)。我想你肯定也觉得这样比队列要好用多了。

这周我们的主题是 Hashable 和相关的新类型 Hasher。它们共同组成了 Swift 最受喜爱的两个集合类 DictionarySet 的基础功能。

阅读全文

作者:Mike Ash,原文链接,原文日期:2018-06-29
译者:BigNerdCoding;校对:pmstnumbbbbb;定稿:Forelax

调试复杂问题本身就并不轻松,如果还没有足够的上下文和大致方向的话那就是一件非常困难的事。所以对代码进行精简缩小调试范围也就变成了一种常见的行为。不过与繁杂的手动简化相比,执行自动化处理程序明显更容易发挥计算机自身的优势。C-Reduce 正是为此而生,它能自动对原始代码进行简化操作输出一个简化的调试友好版本。下面我们看看如何使用该自动化程序。

阅读全文

作者:AppCoda,原文链接,原文日期:2018-07-11
译者:Hale;校对:liberalismannumbbbbbYousanflics;定稿:Forelax

在美国圣何塞举办的 2018 开发者大会上,苹果公布了 Siri Shortcuts,这是一个令人期待已久的功能,开发人员能够在自己的应用程序中扩展和增强 Siri 的功能。在这之前,SiriKit SDK 的功能非常有限。随着 Siri Shortcuts 的出现,开发人员可以扩展 Siri 的功能并通过构建自定义语音操作来唤起应用程序。

阅读全文

作者:Arthur Knopper,原文链接,原文日期:2017/10/30
译者:jojotov;校对:ForelaxCee;定稿:Forelax

几周前,一位读者指出了 Advanced Swift 中的一处错误。我们当时这样描述 Swift 中的 forEach 方法:

forEach 作为一系列链式调用中的一部分时确实可以大放异彩。举个例子,试想一下你在一个语句中通过链式调用的方式调用了几次 mapfilter 方法。在调试这段代码时,你希望能够打印出某几步操作中间的值。要达成这一目的,在你期望的位置插入一个 forEach 或许是最快速的解决方式。

当我写下这段描述时,众多美妙的想法涌现在我脑中,因为这听起来是个非常实用的特性[1](你并不能通过 for-in 循环达到这种效果)。可事实却如此的残酷 —— 你不能在一系列链式调用中间插入 forEach

阅读全文

作者:Andrew Jaffee,原文链接,原文日期:2018-07-24
译者:BigLuo;校对:pmstnumbbbbb;定稿:Forelax

“Gang of Four” (“GoF”) Erich Gamma,Richard Helm,Ralph Johonson,和 John Vlissides 在他们“设计模式:面向对象软件设计复用的基本原理” 的重要著作里整理了大概 23 种经典的设计模式 。本文会介绍 GoF 总结的两种创建型(creational)模式:工厂方法单例方法

阅读全文

作者:Andrew Jaffee,原文链接,原文日期:2018-02-14
译者:BigLuo;校对:numbbbbbmuhlenXi;定稿:CMB

问题 1:我能否写一个 Swift 函数用于查找在任意数组中存储的任意类型任何实例对象的位置\索引。

问题 2:我能否写一个 Swift 函数用于确定在任意数组中存储的任意类型任何实例对象的类型。

我所说的 “任何类型”,包括自定义类型,比如我们自己定义的 Class 类型。提示:我知道我能够用 Swift Array 类型的内置方法,如 indexcontains,但今天我将会用简单代码实例来说明 Swift 泛型中的一些特性。

阅读全文

作者:Sai Kambampati,原文链接,原文日期:2018-05-31
译者:小袋子;校对:liberalismnumbbbbb;定稿:CMB

区块链作为一项革命性的技术,开始受到越来越多追捧。为什么呢?因为区块链是许多加密数字货币的底层技术,比如:比特币(BTC),以太坊(ETH)以及莱特币(LTC)。区块链具体是如何工作的?本篇教程会涵盖所有区块链相关的知识,还会教你如何构建 Swift 区块链。下面让我们开始吧!

阅读全文

作者:codingexplorer,原文链接,原文日期:2018-07-18
译者:Khala-wan;校对:Yousanflicswongzigii;定稿:CMB

在 watchOS 1 时代,WatchKit Extension 位于已配对的 iOS 设备上,这使得宿主 APP 和 watch 之间的数据共享变得简单。类似偏好设置这种最简单的数据,只需要通过 App Groups 功能来存取 NSUserDefaults。目前在手机上留存的其他扩展程序和主 app 之间共享数据仍然应该使用这种方式,例如 Today View Extension,但它已不再适用于 watchOS 的 app。
幸运的是,苹果为我们提供了新的 API 来做这件事。相比 App Groups,Watch Connectivity 拥有更强大的功能。它不仅提供了你的 Apple Watch 和与其配对 iPhone 之间连接状态的更多信息,还允许它们之间进行交互消息和 3 种方式的后台传输,这些方式分别是:

  1. Application Context
  2. User Info Transfer
  3. File Transfer

我们今天先讨论第一种方式:Application Context。

阅读全文

作者:Ole Begemann,原文链接,原文日期:2017-11-27
译者:东莞大唐和尚;校对:pmstFirecrest;定稿:CMB

这个系列中其他文章:

  1. Swift 1 中的字符串
  2. Swift 3 中的字符串
  3. Swift 4 中的字符串(本文)

本文节选自我们的新书《高级 Swift 编程》「字符串」这一章。《高级 Swift 编程》新版本已根据 Swift 4 的新特性修订补充,新版现已上市。

阅读全文

作者:Ole Begemann,原文链接,原文日期:2018-01-05
译者:BigNerdCoding;校对:pmst;定稿:CMB

简单回答:需要 (在 iOS 11.2 上验证过)

几周之前,我在 twitter 上提出了一个问题

在 iOS 11 中是否还需要手动移除基于 block 形式的通知观察者?苹果开发文档中比较模糊。addObserver(forName:object:queue:using:) 中说需要,而 removeObserver(_:) 中又表明 iOS 9 之后都不在需要。

虽然我没有统计准确的数字,但是大致看来持不同意见的人差不多五五开。

所以下面我们就来具体测试验证一下。

阅读全文

作者:Ole Begemann,原文链接,原文日期:2017-04-07
译者:EyreFree;校对:liberalismFirecrest;定稿:CMB

Swift 3.1 修复了 Swift Package Manager 无法重写 MacOS 部署目标的 Bug。

当你在 macOS 上执行 swift build 命令时,包管理器目前(Swift 3.0 和 3.1)会将部署目标硬编码为 macOS 10.10 ¹ 现已证明是命令参数的一个 Bug 引起的 Swift 3.0 中无法重写部署目标这个问题。

阅读全文

作者:Soroush Khanlou,原文链接,原文日期:2017-03-22
译者:TonyHan;校对:liberalismFirecrest;定稿:CMB

写代码的过程中,复杂性是最大的敌人。对于大型的软件项目来说,维护多层抽象并且让在代码库中工作的开发者正确的理解这些概念是很重要的。

注释可以对管理代码复杂性起到一定作用,但也会对代码产生不良影响。

我对注释的看法来自于两个事实:1)注释并不复杂。2)注释通常在语法高亮中使用柔和的色彩。因为它们不参与编译,并且因为它们并不醒目,所以在更改代码时,很容易忽略它们。如果更改了代码但不更新注释,便得到了一份无法准确描述代码功能的注释。

阅读全文

作者:MATTHIJS HOLLEMANS,原文链接,原文日期:2016-03-25
译者:TonyHan;校对:Yousanflics;定稿:CMB

这篇文章展示了如何利用 Swift 的类型系统来使你的程序更具表现力和健壮性。

在最近一周左右的时间里,我一直在倒腾 Swift 的机器学习算法。我们可以通过使用矩阵来简洁有效地实现这些算法。

如果你忘记了线性代数,那只需将矩阵看作数字表格。

当提到 “M 是一个 4 乘 3 的矩阵”,意思是指 M 是一个 4 行 3 列的数字表格。关于矩阵你就需要了解这些(译者注:即可将其看作是表格),就可以理解本文后面的讲解。

阅读全文