作者:Andyy Hope,原文链接,原文日期:2016-05-18
译者:muhlenXi;校对:YousanflicsLision;定稿:CMB

通常情况下,人们在学习了函数式编程(Function Programming 即 FP)之后就根本停不下来对它的修改,甚至到了一种如果 FP 不是特别酷的话就会烦躁的地步。回忆一下 1999 年经典非主流电影 Fight Club 最著名的情景,完全颠覆了人们的头脑。

函数式编程俱乐部的条例:
1.永远不要停止函数式编程。
2.永远不要停止函数式编程!

阅读全文

作者:Soroush Khanlou,原文链接,原文日期:2018-02-21
译者:东莞大唐和尚;校对:Lefex;定稿:CMB

苹果官方文档中提到过 MVC 的软件设计模式。不过,苹果介绍的并不是本质意义上的 MVC 。关于这一点我之前也有写过一篇文章,MVC 是为 Smalltalk 语言设计的一种设计模式。在 Smalltalk 语言里,MVC 的三个组件:模型(model)、视图(view)和控制器(controller)之间都可以相互通信。这就意味着要么视图知道自己持有的模型是如何实现的,要么模型知道自己是如何在视图中被应用的。

我们写 iOS 软件的时候,通常会把可以直接通信的视图和模型称之为“反模式”(PS:不推荐这么做)。我们所谓的 MVC 更准确的说其实是“模型-视图-适配器(Model - View - Adapter)”。我们说的“视图控制器”其实只是模型和视图中间沟通的一个桥梁。笼统来讲,我觉得这是对正统MVC一个不错的改良——不是把视图和模型绑在一起,而是通过一个适配器把模型和视图联系起来,这个方法不错。然而,不得不说,在我工作中涉及到的大部分系统中,模型和视图都是分开的。

以上就是为什么 iOS 开发里会有视图控制器的原因:用来连接模型和视图。但是这种模式的编码会产生一些问题:有一些代码看起来既不属于模型,也不属于视图,所以我们就把这些代码放到了视图控制器里,最后视图控制器变得超级臃肿。关于这个问题,我在博客里面讨论过很多次,但这次我想说的不是这个问题。

阅读全文

作者:Soroush Khanlou,原文链接,原文日期:2017/07/06
译者:Cwift;校对:numbbbbb;定稿:CMB

Swift 的 Promise 可以让代码变得简单、正确并具有良好的语义。Swift 的错误处理系统也不例外,正确使用它可以大大提高服务器端代码质量。我们的应用 Beacon 使用 Vapor 构建 API。Vapor 提供了许多构建 API 的基本组件,但更重要的是,它提供了扩展功能,你可以自己添加错误处理。

阅读全文

作者:Arthur Knopper,原文链接,原文日期:2017/03/14
译者:imiem;校对:pmst;定稿:mmoaay

Social Framework 使在 App 中使用社交分享成为可能。本教程中我们将从图库中选取一张图片,然后在 Twitter 中分享一个带图片的推文。本教程使用 Xcode 8.2.1 和 iOS 10.2。

阅读全文

作者:Ole Begemann,原文链接,原文日期:2017/07/24
译者:Forelax;校对:Joy;定稿:Forelax

我一直不喜欢 Xcode 默认给新文件头部添加的注释。在我看来,从注释里得到的绝大多数信息要么和文件本身没有关系,要么通过版本控制,你能得到更详尽的信息。此外,当文件和项目更名的时候,这些注释会立刻显得过时。

阅读全文

作者:Jameson Quave,原文链接,原文日期:2017-06-06
译者:冬瓜;校对:Forelax;定稿:CMB

在 iOS 11 发布后,开发者们首次可以在 iPhone7 或者更高的设备上调用 NFC 读取相关的接口。这些接口可以用于传递身份信息或者是用于实现类似门禁、地铁闸机这种功能的数据交换应用。

在 iOS 11 中,这项技术被称作 Core NFC,下面我将在教程中使用 Swift 4 来讨论如何使用它。

阅读全文

作者:Joe,原文链接,原文日期:2016/06/30
译者:EyreFree;校对:walkingway;定稿:CMB

开源 Swift 已经有一些更新来利用新版本的 CMake 在 Linux 上构建 Swift。需要指出的是,Ubuntu 14.04 (2.8.12.2) 自带的默认版 cmake 不再胜任这项工作。

让我们把 Ubuntu 14.04 的 CMake 升级到 3.4.3,开发者表示该版本可以满足需求。

当通过源代码安装软件时,通常会有一个构建区在 /usr/local/src 和一个存档区(所以可以跟踪我构建的版本)在 /usr/local/archive

使用 root 账户或者用 sudo 方式执行:

# cd /usr/local/archive
# wget https://cmake.org/files/v3.4/cmake-3.4.3.tar.gz
# cd ../src/
# tar -xzvf ../archive/cmake-3.4.3.tar.gz

接下来,进行配置并且构建:

# cd cmake-3.4.3
# ./configure --prefix=/usr/local
...
CMake has bootstrapped. Now run make.
# make

最后,make install 会将 cmake 和它的关联设置安装到 /usr/local 目录下。

# make install
# which cmake
# cmake --version
cmake version 3.4.3

CMake suite maintained and supported by Kitware (kitware.com/cmake).

以上就是全部过程。构建愉快!

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg

作者:Umberto Raimondi,原文链接,原文日期:2017-05-07
译者:shanks;校对:shanks;定稿:CMB

当前最新版本的 Swift 语言(译者注:当前最新稳定版本为 3.1.1)还没有包含任何原生并发特性,但是在其他现代编程语言中是带有这个特性的,比如 Go 和 Rust。
如果你想并发地执行任务,这时就需要处理与结果相关的竞态条件,目前唯一的选择就是使用第三方库,比如 libDispatch,或者 Foundation 和其他 OS 中提供的同步原语。
在这一系列文章的第一部分,看看 Swift 3 给出的处理方案,覆盖以下一些内容:Foundation 中的锁,线程和计时器提供语言层面的保证,最近不断增强的 GCD(Grand Central Dispatch) 和操作队列(Operation Queues)。

同时也会讨论到基础的并发原理和一些通用的并发模式。

阅读全文

作者:Jesse Squires,原文链接,原文日期:2017-06-29
译者:四娘;校对:Cwift;定稿:shanks

本期作者:Garric Nahapetian

Swift 的 git 仓库这周特别忙,这里有一些 GitHub 的数据:

除了 Merge 之外,总共有 39 个作者 push 了 156 个 commit 到主分支,所有分支算起来有 284 个 commit。在主分支,401 个文件被修改,增 12589 删 9215 …

在 WWDC 结束不久就完成了这么多的事情实属不易,在 Swift 4 立项之后核心团队和别的贡献者完成了惊人的进展。

阅读全文

作者:Arthur Knopper,原文链接,原文日期:2017-04-18
译者:Crystal Sun;校对:way;定稿:shanks

Sprite Kit 里,精灵(译者注:精灵的英文单词为 Sprite,计算机图形学,指包含于场景中的二维图像或动画)运动的机制是使用动作(actions)。将某种类型的动作添加到一个节点(node)上,Sprite Kit 自动更新位置直到动作完成。更棒的是,可以将多个动作(actions)组合起来。在本节教程中,我们将学习如何给精灵添加动作。本节教程使用 Xcode 8.3 和 iOS 10.3。

阅读全文

作者:Dominik Hauser,原文链接,原文日期:2016-03-28
译者:Doye;校对:way;定稿:shanks

在阅读 obc.io关于轻量级的viewConroller相关讨论之后,每隔几个月我都会反思怎样做才是TableviewController 的最佳实践,我曾经尝试过几种不同的方法包括把 datasource 和 delefate 放到一个独立的类中或者使用 MVVM 架构来对 Cell 进行定制。

本篇是在 2016 年我对这个问题的思索,而且我对这个方案十分满意,方案涉及到了泛型,协议,和值类型。

阅读全文

作者:Arthur Knopper,原文链接,原文日期:2017-04-04
译者:Crystal Sun;校对:way;定稿:shanks

译者注:本文是之前一篇文章的更新版本,旧文链接,旧文使用的 Swift 版本不是 3.0,本文更新了代码,升级到了 Swift 3.0。

属性字符串(Attributed Strings)可以为文本赋予各种各样的属性,还能一次给(部分)文本赋值多个属性。在本节教程中,将学会给 label 文本里的每个单词各设置不一样的样式。本节教程使用的是 Xcode 8 和 iOS 10。

阅读全文

作者:Jesse Squires,原文链接,原文日期:2017-06-15
译者:四娘;校对:Cwift;定稿:shanks

WWDC 已经过去一周了,你有大概了解你的代码要怎么迁移到 Swift 4 吗?我最先接触到的是一堆警告,提示有多余的协议遵守,查证得知这是个 bug。但说回来,比起去年我花了两个星期迁移到 Swift 3 来说,这次的升级已经好很多了。

而且,牢记 Swift 3.2 版本实际是在 Swift 3 兼容模式下运行 Swift 4 的编译器(-swift-version 3,通过这届 WWDC,我理解了很多东西)。当你在浏览 bugs.swift.org 时记住这一点也会很有帮助。

阅读全文