Hi,SwiftGG 翻译组启用了新的域名:swiftgg.team今后翻译组的各项活动将会在新域名下开展,不要错过哦!

作者:Erica Sadun,原文链接,原文日期:2016-08-10
译者:冬瓜;校对:CMB;定稿:CMB

为了找到两个日期之间的时间间隔,需要调用 dateComponents(_:, from: , to:) 方法,并传入你要使用的单位。这个方法将会返回一个 DateComponents 实例,通过 .day 这个成员(property),你可以得知传入的两个日期之间相差的天数。

如果想写一个返回多计量单位的方法来描述两个日前间的间隔时间,无论天数、分钟数、秒数还是年份,应该怎么做呢?

阅读全文

作者:Ole Begemann,原文链接,原文日期:2016/09/28
译者:Lanford3_3;校对:saitjr;定稿:CMB

对于位掩码,Swift 给出的方案是:选项集合(option sets)。在 C 和 Objective-C 中,通常的做法是将一个布尔值选项集合表示为一系列值为 2 的整数次幂的枚举成员。之后就可以使用位掩码来选择想要的选项了。举例来说,NSString 定义了一个名为 NSStringCompareOptions 的枚举以表示字符串比较选项:

阅读全文

作者:Joe,原文链接,原文日期:2016-07-04
译者:粉红星云;校对:shanks;定稿:CMB

原文图片链接全部失效,因此本文图片无法显示。

这里是在 Linux 上使用 Swift 来编写MQTT客户端系列的一篇文章。

在这篇文章里,我们将着眼在 MQTT遗愿消息。一般是连接着代理程序的客户端预定义好 LWT(Last Will and Testament)的。如果客户端异常地断开连接,代理程序(the broker)将会广播 LWT 消息到所有订阅者的客户端中。

阅读全文

作者:Joe,原文链接,原文日期:2016/04/12
译者:Cwift;校对:walkingway;定稿:CMB

原文图片链接全部失效,因此本文图片无法显示。

移动应用分析是指捕获并分析用户在使用应用时产生的用户行为。当然,完整的应用分析包括了操作系统、桌面应用、web应用等等,移动应用分析只是其中的一个分支。直到今年早些时候,Parse 还是一个流行的云平台,用于捕获和显示移动应用程序的使用数据。

从 Prase 的突然离开给我们上了一课。首先,对于从事软件开发超过一年的人来说,不应该感到奇怪,没有什么是永恒的。所以,事情发生了改变。第二个教训可能是,你曾经经历过因为平台不断改动引发的愤怒(或者疼痛),那么为什么不抽象出一些底层的操作,并且让这些操作在将来更容易被更改呢?我们已经从前人的经验中学习,准备应用到移动分析上,让应用更加的“面向未来”。

阅读全文

作者:Soroush Khanlou,原文链接,原文日期:2016-09-27
译者:saitjr;校对:CMB;定稿:CMB

可以说 Swift 是 Objective-C 的后继之人,毕竟也算是师出同门。但是他们语法看来不像,用起来也不像,给人的感觉也不一样。有些在 Objective-C 上用得好端端的案例,在 Swift 上却看起来怪怪的,如方法命名。在 Objective-C 中,方法名尽量完整:

[string dataUsingEncoding:NSUTF8StringEncoding];

在 Swift 2.2 中,这样调用看着就没那么优雅:

string.dataUsingEncoding(NSUTF8StringEncoding)

在 Swift 3 中,这个方法看起来就顺眼多了:

string.data(using: .utf8)

所以,像 Swift 3 中这样的命名方式,才是 Swift 的正确姿势。而 Objective-C 的方式也只适用于 Objective-C。我觉得这篇文章应该能帮你在新世界中修炼你的方法命名习惯。

阅读全文

作者:Ole Begemann,原文链接,原文日期:2016-08-29
译者:与狼同行;校对:Cwift;定稿:CMB

本系列其他文章:

(1) Measurements 和 Units 概览
(2) 乘法和除法
(3) 内容提炼
(4) 幽灵类型(本文)

我之前撰写了关于标准库里新的度量值的短系列,此文是该系列的额外之作。虽然我很喜欢苹果的 API ,但我觉得探索同一问题的不同解决方案也很有意思。特别是这个问题,纯 Swift 设计是否能优于苹果的接口呢,因为苹果的接口考虑了 Objective-C 的兼容性问题

阅读全文

作者:Joe,原文链接,原文日期:2016-09-24
译者:shanks;校对:walkingway;定稿:CMB

如果你阅读过本主其他的 Swift 文章,你会发现我们是 Swift 服务器端开发的忠实拥护者。
今天我们将继续研究这个主题,使用 Vapor 封装的 MySQL wrapper 来操作 MySQL 数据库。

说明:这并不是一篇介绍 MySQL 或 SQL 的文章,如果你对数据库还不熟悉,网上有大量的教程可供学习。本篇我们将焦聚在 Linux 上使用 Swift 3.0 来操作 MySQL 数据库。

阅读全文

作者:Terhechte,原文链接,原文日期:2016/07/15
译者:BigbigChai;校对:way;定稿:千叶知风

Swift 3 : 从 NSData 到 Data 的转变

Swift 3 带来了许多大大小小的变化。其中一个是为常见的 Foundation 引用类型(例如将 NSData 封装成 Data ,将 NSDate 封装成 Date)添加值类型的封装。这些新类型除了改变了内存行为和名字以外,在方法上也与对应的引用类型有所区别 1。 从更换新方法名这类小改动,到完全去掉某一功能这种大改动,我们需要一些时间去适应这些新的值类型。本文会重点介绍作为值类型的 Data 是如何封装 NSData 的。

阅读全文

作者:Tikitu de Jager,原文链接,原文日期:2015-10-31
译者:Darren;校对:Cee;定稿:CMB

好吧,其实我标题党了:Swift 扩展只能添加计算属性。然而如果你愿意用 Objective-C 的关联对象,你可以在 Swift 中做一些同样有趣的事。有很多的模板可供选择,然而如果你用这些太过显然的方式,你也就牺牲了类型安全。我们可以做得更好吗?

阅读全文

作者:Russ Bishop,原文链接,原文日期:2015-01-05
译者:靛青K;校对:shanks;定稿:CMB

我想要一个关联类型的圣诞礼物

关联类型系列文章

有时候我认为类型理论是故意弄的很复杂,以及所有的那些函数式编程追随者都只是胡说八道,仿佛他们理解了其中的含义。真的吗?你有一篇 5000 字的博客是写关于插入随机类型理论概念的吗?毫无疑问的没有。a)为什么有人会关心这些以及b)通过这个高大上的概念能帮我们解决什么问题?我想把你装进麻布袋里,扔进河里,并且砸进一个里。

我们在讨论什么?当然,关联类型。

当我第一次看到 Swift 范型的实现时,关联类型 的用法的出现,让我感到很奇怪。

在这篇文章,我将通过类型概念和一些实践经验,这几乎都是我用自己的思考尝试解释这些概念(如果我犯了错误,请告诉我)。

阅读全文

作者:Jameson Quave,原文链接,原文日期:2016-08-10
译者:Joy;校对:bestswifter;定稿:千叶知风

我想要分享一段来自 Swift 开发者的简短对话,KS Sreeram 写到:

我试图通过下面几步,通过最少的数据复制,高效地创建一个字节数组

  1. 创建一个空的字节数组。
  2. 在数组中预留充足的空间。
  3. 使用可变指针去做数组的数据填充。
  4. 只有数组被填充之后,才能知道它的实际大小。
  5. 我想要设置数组的大小为它被填充的实际大小。

我还没有找到任何有效的方法去完成最后一步。有办法去这么做吗?

阅读全文

作者:SAHAND EDRISIAN,原文链接,原文日期:2016-08-09
译者:ckitakishi;校对:mmoaay;定稿:CMB

在 2016 年的 WWDC 上,Apple 介绍了一个十分有用的语音识别 API,那就是 Speech 框架。事实上,Siri 的语音识别正是由 Speech Kit 提供支持。就目前来说,可用的语音识别框架并非没有,但是它们要么太贵,要么不够好。在本教程中,我将会向你演示如何使用 Speech Kit 来创建一个像 Siri 一样的应用来进行语音到文本的转换。

阅读全文

作者:Ole Begemann,原文链接,原文日期:2016/07/29
译者:钟颖;校对:小铁匠Linus;定稿:CMB

更新:
2016-08-02 已将代码更新至 Xcode 8 Beta 4

本系列其他文章:

(1) Measurements 和 Units 概览

(2) 乘法和除法

(3) 内容提炼(本文)

(4) 幽灵类型

Swift 中 Measurements 和 Units 的系列文章中,仍然有一些收尾工作要做。如果你还没有看过之前的文章的话,可以在第一部分中找到 Foundation 框架中 Measurements 和 Units 接口的大致介绍,并在第二部分中看到我如何扩展该系统用于类型安全的乘法和除法。

阅读全文

作者:Andyy Hope,原文链接,原文日期:2016-01-24
译者:jseanj;校对:saitjr;定稿:CMB

几周前,我无意发现 Guille Gonzalez 写的一篇文章,介绍了如何用协议和扩展让 UITableViewCell 的注册和重用更安全。

看完这篇文章后我非常惊叹,因为不需要依赖继承,只需要协议扩展和泛型就可以非常容易的实现自定义的行为。自从 WWDC15,我们已经听到关于 Swift 如何是一门面向协议的语言,而我只是一知半解,如果你懂我的意思的话。而就在此时我终于明白他们在讲的是什么了。

在我花费大量时间做的应用中有一个大的 storyboard,使用起来令人难以置信的繁琐,所以我最后决定将它分离开。将一个巨大的 UIStoryboard 分成众多小的 UIStoryboard,然后我只需要在我的代码中用不同的字符串去实例化 UIStoryboard,但是这样从来不安全。

阅读全文

作者:Natasha The Robot,原文链接,原文日期:2016/05/25
译者:haolloyin;校对:saitjr;定稿:CMB

有条传播得很广的 tweet 讲到用位置参数(positional references)来初始化 Swift 常量:

原始代码见这个 gist(译注:原 gist 代码缩进太乱,搬运过来整理如下):

import UIKit
import XCPlayground

class ViewController: UIViewController {
func action() { print("Bing!") }

override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .whiteColor()

let mySwitch : UISwitch = {
view.addSubview($0)
CenterViewInSuperview($0, horizontal: true, vertical: true)
$0.addTarget(self, action: "action", forControlEvents: .TouchUpInside)
return $0
}(UISwitch())

let _ : UILabel = {
view.addSubview($0)
CenterViewInSuperview($0, horizontal: true, vertical: false)
$0.text = "Toggle me"
$0.font = UIFont.boldSystemFontOfSize(36)
ConstrainViews("V:[view1]-30-[view2]", views: $0, mySwitch)
return $0
}(UILabel())
}
}

ViewController()
XCPlaygroundPage.currentPage.liveView = ViewController()
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

由于这条 tweet 太简短,而且没有像我预期的那样运作,这让我很困惑。因此我想在这儿写一篇关于这个问题更详细的文章。

阅读全文

作者:Ole Begemann,原文链接,原文日期:2016-07-28
译者:粉红星云;校对:saitjr;定稿:CMB

文章更新日志:

  • 2016/06/30 增加了一个“不足之处”小节,主要关于语法冗长。还有很少一部分内容的重写。
  • 2016/08/02 把代码更新到 Xcode 8 beta 4 版本的。

这个系列的其他文章:

  1. 在 Foundation 框架中的度量值和单位(本篇文章)
  2. 乘法和除法
  3. 改良
  4. 幽灵类型 (Phantom Types)

在 iOS 10 和 macOS 10.12 里的 Foundation 框架,新出了一系列将度量单位模型化的类型,我们在现实中真实使用的度量单位,比如:1 千米,21 摄氏度。如果你还没了解过这个,看看 WWDC session 238 吧,这里概述讲的挺好的。

阅读全文