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

作者:Natasha,原文链接,原文日期:2015-12-17
译者:小锅;校对: 定稿:千叶知风

回溯到八月份,我观看了 Swift in Practice WWDC15 这个超赞的视频。视频的第一部分让我印象十分深刻,因此我针对这部分写了一篇博客—— A Beautiful Solution to Non-Optional UIImage Named in Swift ——然后我最终开始准备写关于这个视频的第二部分,甚至其它更多令人激动的部分(毕竟,假期是最好的写博客的时机)(译者注:大神就是这样啊,假期不是用来玩的,反而是写博客的大好时机)。

阅读全文

作者:Jesse Squires,原文链接,原文日期:2016/1/21
译者:pmst;校对:numbbbbb;定稿:numbbbbb

自 Apple 宣布 Swift 开源已过去一个月,我仍然在坚持探索新事物,乐此不疲,见证着 Swift 的成长与蜕变。欢迎来到新一期的每周开源简讯 #6!

Commits 和 Pull requests

Anton Blanchard 关于增加 PowerPC64le Linux 支持的提案已经被合并了。不得不说,这确实令人印象深刻,当然也非常。😎

@Iplarson 提交了一个 pull request,目的是为了支持代码覆盖分析。很高兴看到这一点。如果能在 pr 中自动显示分析报告就更好了。

阅读全文

作者:Natasha,原文链接,原文日期:2016-01-14
译者:saitjr;校对:千叶知风;定稿:Cee

使用 Swift 过程中,我意识到的第一个问题就是没有 NSStringFromClass 的替代方案。在自定义 TableViewCell 时,我喜欢用类名作为 cell 的 identifier,然后在重用队列中,通过 NSStringFromClass 来获得 identifier,从而避免拼写错误。

然而,在 Swift 中,我不得不写一个丑陋的 extension 来达到这一目的。(参考 StackOverflow 的回答

阅读全文

作者:shanks

本周共整理了 5 个问题,都是一些感觉很有意思的问题,分享给大家。看到很多入门问题就没有整理了。

本周整理问题如下:

阅读全文

作者:Olivier Halligon,原文链接,原文日期:2016-01-06
译者:walkingway;校对:小锅;定稿:numbbbbb

各位新年快乐🎇🎉🎊🎆! 2016 年第一篇博客我想分享一个非常有用的技巧,那就是向大家展示 Swift 泛型的强大,以及方便地使用泛型来处理 UITableViewCellsUICollectionViewCells

介绍

我不喜欢使用字符串做标识符,我认为使用常量要比字符串好很多。

但是,当涉及到 UITableViewCellUICollectionViewCell 以及他们的重用标识符(reuseIdentifiers)时,我想采用一种更加魔幻的解决方案:『使用 Swift 的泛型 + Mixins 的方式』,下面让我们摒住呼吸,见证奇迹的时刻。

阅读全文

作者:Ole Begemann,原文链接,原文日期:2015-12-17
译者:pmst;校对:Cee;定稿:小锅

定稿注:原文没有提供源码,作为一个走心的翻译组,我们已经将本篇文章的最终版源码作成 Playground,可以到这个地址进行下载。

更新:

2015-12-17 提到 Swift evolution 邮件列表中一个关于行为属性的新提案,如果这个提案被采取,则本篇文章中的大部分将成为过时的内容

Swift 中的 lazy 关键字允许你定义这么一个属性:它的初始值在当它被首次访问的时候才计算。举个例子,试想通过一个结构体来描述一副图像。该图像的元数据(metadata)字典创建操作所需要的开销代价也许很大,因此我们更倾向于推迟这个行为直至需要该数据的时候。我们可以像这样声明一个 lazy var 属性:

阅读全文

作者:Mike Ash,原文链接,原文日期:2015-11-06
译者:Cee;校对:numbbbbb;定稿:numbbbbb

译者注:可以结合 WWDC 2015 Session 227 - What’s New in Internationalization 一起学习

欢迎来到本期因修改了很多次稿而推迟发布的周五问答。我发现很多人在使用 Swift 时,都会抱怨 String API 很难用。它很难学习并且设计得晦涩难懂,大多数人希望它能采用其他语言的字符串(String) API 设计风格。今天我就要来讲一下为什么 Swift 中的 String API 会被设计成现在这样(最起码要解释清楚我的看法),以及为什么我最终会认为,就其基础设计而言 Swift 中的 String API 是字符串 API 中设计得最好的。

阅读全文

作者:Dominik Hauser,原文链接,原文日期:2016-01-09
译者:小袋子;校对:千叶知风;定稿:numbbbbb

如果你经常看我的博客,那应该知道,我在调试时最喜欢的方法是模拟 NSURLSession 返回的数据。

那么我们到底要做什么呢?其实就是模拟方法的回调数据。而这里的 NSURLSession 指的是伪造 web API 的响应。这样做有一些好处,例如:

  1. 我们不需要可用的 web API 就能开发应用程序的网络请求。
  2. 瞬时响应,反馈周期更短。
  3. 测试程序能在没有连接网络的电脑上运行。

阅读全文

作者:Nick Hanan,原文链接,原文日期:2015-12-08
译者:mmoaay;校对:千叶知风;定稿:numbbbbb

过去的几个月我一直保持着写博客的习惯,但是现在我得专心工作了。最近在做一些 watchOS 2 相关的更新工作,我觉得如果出个系列教程会对大家很有帮助。首先我们需要学会开发第一个 watchOS 2 应用,所以下面来开发一个 watchOS 2 风格的 “Hello World!”吧!

在教程开始前,我准备介绍如何使用 Swift 在 iOS、watchOS、tvOS 和 OS X 上编程。此外,如果你想在本博客中学到其他知识,请给 Twitter @CodingExplorer 或者 Contact Page 来提出建议。

阅读全文

作者:Erica Sadun,原文链接,原文日期:2015-10-19
译者:CMB;校对:Cee;定稿:千叶知风

传统的 Cocoa 在使用字典时有个不好的习惯。无论是用户信息还是字体选项亦或是视频流(AVFoundation)设置,NSDictionary 一直担任 Cocoa 传递数据的角色。字典是灵活的、易用的,但它也存在诸多潜在的危险。

在这篇文章中,我将讨论另一种更加 Swift 化的方法。这并不是一个能够彻底解决问题的方法,但我认为它是一个在后 Swift 时代中能够更好展示 API 是如何工作的观念模式。

阅读全文

作者:shanks

本周共整理了 5 个问题,程序员的问题也是千奇百怪。。大家可以看看本周整理的几个问题。。好好感受下吧

本周整理问题如下:

阅读全文

作者:Natasha,原文链接,原文日期:2015-12-23
译者:lfb_CD;校对:numbbbbb;定稿:Cee

有一个常见的场景:一个 ViewController 控制多个 View ,并且想在 ViewController 中代理 View 的一些逻辑。

例如,你有一个 View,其中包含一个按钮(比如在表单中的「注册」),并且当用户点击这个注册按钮时,你希望代理其中的逻辑(比如注册验证和调用 API)。

你的代码应该会是这样的:

// 代理点击的协议
protocol ButtonDelegate {
func onButtonTap(sender: UIButton)
}

class ViewWithTextAndButton: UIView {

// 保存代理,后面使用
var delegate: ButtonDelegate?

func onButtonTap(sender: UIButton) {
// 按钮被点击的时候调用代理
delegate?.onButtonTap(sender)
}
}

class MyViewController: UIViewController, ButtonDelegate {

let viewWithTextAndButton = ViewWithTextAndButton(frame: CGRect(x: 0, y: 0, width: 100, height: 100))

override func viewDidLoad() {
super.viewDidLoad()

// 给代理赋值
viewWithTextAndButton.delegate = self
view.addSubview(viewWithTextAndButton)
}

// MARK: ButtonDelegate
// 实现代理逻辑
func onButtonTap(sender: UIButton) {
print("This button was clicked in the subview!")
}

}

阅读全文

作者:Jesse Squires,原文链接,原文日期:2016-01-07
译者:pmst;校对:numbbbbb;定稿:numbbbbb

假期一晃而过,Swift.org 又重新开始更新东西啦。倘若你也是 Apple GitHub 开源项目的跟随者之一,你可能已经注意到了。早前不知为何我错过了一些重要的东西,直到本周我才发现 SwiftExperimental.swift 这货。目前,它为 Set 集合自定义了大量 unicode 操作(译者注:有 ∈ 、∉、⊂、⊄、⊆ 等等!)。这真是棒极了!我迫不及待想要在标准库中看到更多诸如此类的 API 接口。不管怎样,先来看看本周有哪些好玩的东西吧。

阅读全文

作者:Jacob Bandes-Storch,原文链接,原文日期:2015-11-28
译者:mmoaay;校对:千叶知风;定稿:shanks

做程序员有一点优势:如果工具不好用,你自己就可以对它进行优化。而 Swift 让这一点变得尤其简单,它包含的几个特性可以让你以一种自然的方式对这门语言进行扩展和自定义。

在本文中,我将分享 Swift 给我编程体验带来提升的几个例子。我希望在读了本文之后,你可以认识到使用这门语言时你自己的痛点在哪,并付诸实践。(当然需要先思考!)

阅读全文

作者:Erica Sadun,原文链接,原文日期:2016-01-01
译者:walkingway;校对:saitjr;定稿:shanks

今天,iOS Dev 周刊 贴出一篇 Alexei Kuznetsov 的关于『从你的代码中删除 guard 』的文章。Kuznetsov 指出支持他这篇文章的理论依据主要来自于 Robert C. Martin,这位世界顶级软件开发大师提出:代码必须精简。即关于函数存在两条规则,第一条:函数应该保持精简;第二条:没有最精简,只有更精简。Alexei Kuznetsov 表示应将 Martin 的理论应用在今后的 Swift 开发中。

Kuznetsov 写到『使用 guard 语句能有效减少函数中的嵌套数量,但 guard 存在一些问题。使用 guard 语句会使我们在一个函数中做更多的事情,以及维护多个级别的抽象。如果我们坚持短小、功能单一的函数,就会发现根本不需要 guard』。

我写这篇文章的目的是为了反驳 Kuznetsov 提出的观点,接下来我要说说我的看法。

阅读全文

作者:shanks

本周大事是第一届中国 Swift 开发者大会。笔者也请假去北京朝圣。由于大神超多,场面很火爆。可以看出随着 Swift 的开源,加入 Swift 大军的程序猿越来越多。大神们的讲座也很精彩。不虚此行。大家可以通过这里查看大会的精彩内容。本周共整理了5个问题。

本周整理问题如下:

阅读全文

作者:Benedikt Terhechte,原文链接,原文日期:2015-12-08
译者:小锅;校对:Prayer;定稿:CMB

现在 Swift 已经开源了,应该有很多感兴趣的用户已经在他们的 Linux 系统上安装把玩过了。然而,目前的 Foundation 框架还在紧锣密鼓地开发中,所以如果你想开发出比命令行更复杂一点的程序,就得链接已有的 Linux 库,如 GTK, Cairo 或者 libpng 以开发出图形界面的程序。

阅读全文

作者:gabriel theodoropoulos,原文链接,原文日期:2015-09-29
译者:BridgeQ星夜暮晨;校对:小铁匠Linus;定稿:CMB

同每一代 iOS 系统版本的更新一样,最新发布的 iOS 9 为用户和开发者带来了许多新特性以及原有功能的改善。在这个版本中,我们不仅看到了很多首次推出的 API,还可以看到许多针对原有框架和类库的更新。此外,一些旧版本的 API 被标记为 deprecated(校对注:意为新版本已被弃用),而使用了更好的 API 来替代。iOS 9 中,新的 Contacts framework (联系人框架)是最好的例子了,它是来代替原有 AddressBook framework 的。该框架更加符合技术潮流且简单易用。

阅读全文