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

Swift 发布之后,Swift 的开发者一直在强调,安全性与可选择类型是 Swift 最为重要的特性之一。他们提供了一种’nil’的表示机制,并要求有一个明确的语法在可能为’nil’的实例上使用。

可选择类型主要以下两种:

  1. Optional
  2. ImplicitlyUnwrappedOptional

阅读全文

在 WWDC 2014(苹果 2014 年开发者大会)发布的 Swift 编程语言,大约在一周内将迎来它的两周岁生日(译注:WWDC 2014 的时间是 2014-6-3)。当时听到这个消息,我们在工作室里兴奋地跳了起来,并从此投入到了 Swift 的怀抱。然而两年时间过去了,我依然在苦苦思索着怎样写出好的 Swift 代码。要知道 Objective-C 已经快有三十年历史了,我们都已经摸索出 Objective-C 的最佳实践,以及什么是好或坏的 Objective-C 代码,然而 Swift 还很年轻。

在这一系列的文章里,我将尝试提炼出我认为的 Swift 语言中好与不好的部分。诚然我不是这方面的专家,我只是希望抛砖引玉,分享我对这个问题的思考,并激励其它开发者(没错就是你)表达自己的见解。如果你对此有任何想法、批评,或者对于好代码的看法,可以在原文下面留言,或者 在 Twitter 上联系我

让我们进入正题。

阅读全文

作者:Joe,原文链接,原文日期:2016-06-25
译者:小锅;校对:saitjr;定稿:CMB

我们对“让 Swift 3.0 在更多的 Linux 系统上运行”这件事充满了热情,因此我们开始在 Ubuntu 16.04,即 Xenial Xerus,X86 系统上构建 Swift 3.0。安装过程十分简单,只需要添加我们的 APT 仓库,并使用 apt-get 就可以了。二进制文件会被安装到 /opt/swift/swift-3.0 目录下,所以在安装 3.0 版本后需要更新 path 路径。编辑手记:对于我们为什么使用 /opt/swift 而不是 /usr/bin/ 目录,可以在 swift-dev 邮件列表上的这个帖子里面找到原因。

阅读全文

作者:Jameson Quave,原文链接,原文日期:2016-06-20
译者:Crystal Sun;校对:numbbbbb;定稿:CMB

这篇教程写于 2016 年 6 月 20 日,使用 Xcode 8 Beta 1 和 Swift 3 开发。

此文章是 SiriKit 教程系列的第二篇,建议先去阅读第一篇

处理 SiriKit 请求

为了让集成的 Siri 更有用,可以使用 INSendMessageIntentHandling 协议的回调方法增加信息内容。协议有以下可选方法:

resolveRecipients(forSendMessage intent: INSendMessageIntent, with completion: ([INPersonResolutionResult]) -> Swift.Void)

resolveContent(forSendMessage intent: INSendMessageIntent, with completion: (INStringResolutionResult) -> Swift.Void)

resolveGroupName(forSendMessage intent: INSendMessageIntent, with completion: (INStringResolutionResult) -> Swift.Void)

resolveServiceName(forSendMessage intent: INSendMessageIntent, with completion: (INStringResolutionResult) -> Swift.Void)

resolveSender(forSendMessage intent: INSendMessageIntent, with completion: (INPersonResolutionResult) -> Swift.Void)

阅读全文

作者:Erica Sadun,原文链接,原文日期:2016-05-02
译者:Crystal Sun;校对:numbbbbb;定稿:Cee

今天下午发生了一场激烈的争论:

func foo<T: protocol<A,B>>(x: T)

对比

func foo<T: protocol<A, B>>(x: T)

很明显,后者赢了。为什么?因为符合正字法(orthography)的规则(定稿注:来源于希腊语中的正确(Ortho)和书写方式(Graphia),表示通用的社会性的文字表示规范。这里指约定俗成的代码规范。留白是一种美)。

阅读全文

作者:Natasha The Robot,原文链接,原文日期:2016-07-01
译者:haolloyin;校对:Cee;定稿:numbbbbb

这周末我终于有点空余时间来捣鼓一个有趣的业余项目了。我看到好友 @chiuki 做了一个叫做 Fit Cat 的 Android Watch 应用,我也想在我的 Apple Watch 上搞一个,@chiuki 同意了。

Fit Cat 会依据你的步数显示可爱的小猫咪,设计师是很有才的 @VPoltrack。你偷懒时小猫就会睡觉,你健身时它就会玩毛线球。它还会唱 K、爬山,真的很可爱。

当我在新项目中打开素材库时,立马来了兴致。为什么不创建一些 Fit Cat 的表情然后分享给朋友呢?

阅读全文

作者:Gregg Mojica,原文链接,原文日期:2016/06/24
译者:saitjr;校对:Cee;定稿:千叶知风

CocoaPods——Swift 与 Objective-C 项目的依赖管理工具,iOS 开发者的必备技能。如果你没有任何 CocoaPods 经历,那么这篇短文就是为你而写。我们将会学到什么是 CocoaPods,为什么我们要使用它,还有怎样开始使用它!

AppCoda 的绝大多数教程写得都很详细,本文要比其他传统教程短,仅作为 CocoaPods 的入门文章。

阅读全文

作者:Joe,原文链接,原文日期:2016/06/27
译者:ahfepj;校对:saitjr;定稿:Cee

如果你在推特上关注了我们(@iachievedit)你就知道我们不仅做了很多 Swift 开源项目,还有做了一些操作系统和架构。我们决定做这个项目没有特别的原因,但是看着各个版本的 git 仓库最终整合一个工具感觉真是太棒了。

我们很高兴最终 Swift 能够取代 Linux 上的其他脚本语言(比如名字读起来像 Bython 和 Buby 的两门语言),对我们来说是时候写脚本了(用 Swift)。

阅读全文

作者:Benedikt Terhechte,原文链接,原文日期:2016/04/23
译者:Lanford3_3;校对:saitjr;定稿:CMB

在 Swift 中,枚举(Enums)是一种优雅的结构化信息的方式。有时候你会发现自己需要通过原始值(raw values)来构造枚举,因为这些值可能零星地存储在某些地方,比如 NSUserDefaults

enum Device: String {
case Phone, Tablet, Watch
}
let aDevice = Device(rawValue: "Phone")
print(aDevice)

// 打印结果为: Optional(main.Device.Phone)

阅读全文

摘要

本文上半部分将为您解释为什么在实际项目中为什么不要调用 onError 以及尽量不使用 Driver 。同时给出一种合理的解决方案,让我们仍然可以愉快的传递 Error ,并对 Value 进行处理。
下半部分将介绍用函数式来精简我们的代码。

注:本文基于 Swift 3 。

阅读全文

作者:Natasha The Robot,原文链接,原文日期:2016-05-28
译者:Channe;校对:Cee;定稿:千叶知风

我最近在读《重构与模式》 。昨天(译注:原文日期的昨天),在我写描述了一个拥有多个参数的对象的《创建方法》时,想到了@modocache关于iOS API 设计中的 Swift 模式超棒的演讲,尤其是关于参数对象部分。我第一次看的时候获益匪浅,因此我希望记录下来。

阅读全文

作者:Natasha The Robot,原文链接,原文日期:2016-04-15
译者:Cee;校对:Channe;定稿:千叶知风

最新被接受的

SE-0048泛型别名在定义中引进了类型的参数,例如:

typealias StringDictionary<T> = Dictionary<String, T>
typealias DictionaryOfStrings<T : Hashable> = Dictionary<T, String>
typealias IntFunction<T> = (T) -> Int
typealias Vec3<T> = (T, T, T)
typealias BackwardTriple<T1,T2,T3> = (T3, T2, T1)

为类型重新声明别名时有一些限制条件。例如在存放字符串的词典中,主键必须实现 hashable 协议才能够使用。Swift 的编译器会在不满足限制条件时提供一些反馈:

typealias DictionaryOfStrings<T> = Dictionary<T, String>
// error: type 'T' does not conform to protocol 'Hashable'

干得漂亮。

阅读全文

作者:Joe,原文链接,原文日期:2016-04-16
译者:pucca601;校对:Cee;定稿:千叶知风

密钥,或者说「凭证」,是在使用 REST API 时难免会碰到的一件事情。当你注册了 Amplitude 后,你会得到一个密钥用来唯一识别你的应用。若你使用的是 Aeris Weather 的 API,会得到一个 ID 和密码。如果你要在 iOS 应用里调用这些 API,则需要把这些 API 密钥放在某处。在之前的一篇文章中我们整理了如何在属性列表文件中放置 API 密钥。这篇教程中,我们将要加密这些 API 密钥并且关注如何在你的 app 中访问它们。

在我们开始之前,我想要谈谈安全问题。我不是一个安全领域的专家,你很可能也不是。这篇文章原本的标题是「加密 API 密钥」,但经过再三考虑,我重新将其命名为「混淆 API 密钥」。文章中没有一处对这种混淆方式不会被破解进行了保证,因为任何人真的想要盗取你的 API 密钥时一定会用各种手段获取到。混淆这种方式只能为盗取提高一点门槛。

阅读全文

作者:Joe,原文链接,原文日期:2016-06-12
译者:shanks;校对:CMB;定稿:Cee

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

在过去几年的时间里,我一直从事物联网(Internet of Things,IoT)软件的开发项目。在这段时间里面,我学到了不少关于和云端通信传感以及遥感的协议方案。在物联网领域最通用的方案是 MQTT ,一个轻量级的协议,用于发布消息给频道,同时提供对频道的订阅功能。这种模式通常被称为「发布──订阅」模式

除了在做物联网和 MQTT 的工作以外,我对 Swift 语言充满了兴趣,特别是在 Swift 开源,进入了服务器端领域,能够在 Linux 下运行以后。自然地,可以把这些领域的知识连接在一起,开始使用 Swift 来实现一个 MQTT 的客户端。我们把这个基于 Swift 3.0 和 Linux 平台的 MQTT 客户端的 iOS 实现开放出来了。这个例子说明,实际上, Swift 已经同时进军了服务器端和物联网领域。

在我们开始之前,做一个免责声明:目前基于 Linux 下的 Swift 3.0 版本还处于开发者预览版阶段。从这里可以获取到在 Ubuntu 14.04 和 15.10 下使用 Swift 3.0 的信息。或者,如果你有一台如 BeagleBone Black 等基于 armv7 的设备,可以尝试使用 Swift 3.0 版本下的 ARM port

阅读全文

作者:Erica Sadun,原文链接,原文日期:2016-04-12
译者:赵磊;校对:Channe;定稿:Cee

许多 Cocoa 和 Cocoa Touch 的函数调用都是很死板的。几乎每个调用都采用普遍的参数值。为什么不利用 Swift 默认方法来代替?我们可以对这种函数进行简化:

dismissViewControllerAnimated(flag: true, completion: nil)

可以这么调用:

dismiss()

阅读全文

作者:SIMON NG,原文链接,原文日期:2016-06-20
译者:小袋子;校对:Cee;定稿:Channe

WWDC 2016 上最重磅的消息之一就是在 iOS 10 中引入了 Message 框架。开发者现在可以为苹果内置的 Messages 应用开发扩展啦。通过开发一个应用扩展,你可以让用户跟应用在 Messages 应用中交互。例如,你可以开发一个 Message Sticker Extension 允许用户跟朋友交流时发送表情贴纸。如果你已经开发了一个图片编辑的应用,那么你可以开发一个扩展,这样用户就可以在 Messages 应用内部编辑图片了。扩展的支持为很多应用开发者提供了大量的机会。苹果甚至为 iMessage 引入了 App Store,所以你可以在商店内售卖专门为 iMessage 开发的应用扩展。

阅读全文

作者:Jameson Quave,原文链接,原文日期:2016-06-14
译者:Crystal Sun;校对:Cee;定稿:Channe

这篇教程写于 2016 年 6 月 13 日,使用 Xcode 8 Beta 1 和 Swift 3.0 toolchain(工具链)。

下载 Xcode 8,配置 iOS 10 和 Swift 3

如果你还没有下载 Xcode 8 Beta 1,请到这里下载。

(可选)通过命令行编译

除非你想使用命令行编译,使用 Swift 3.0 的工具链并不需要对项目做任何改变。如果你想的话,打开 Xcode-beta,然后从顶部菜单栏中选择 Xcode > Preferences,接着选择 Location,在页面的底部,你会看到「Command Line Tool」这行设置,请在这里选择 Xcode 8.0。

阅读全文

作者:Natasha The Robot,原文链接,原文日期:2016-05-27
译者:Crystal Sun;校对:Cee;定稿:Channe

正如上个月在几个会议上我所讲的那样《重构与模式》 这本书被多次提及,特别是在我喜欢的研讨会上。最终我还是读了一小部分(至少是在 WWDC 大会发布后的疯狂情绪高涨之前),并且我希望能够通过将书中的模式(pattern)记录下来,以供将来参考。我还发现,通过把书中的 Java 代码翻译成 Swift,我能更好地记住这些知识点。

阅读全文

作者:Olivier Halligon,原文链接,原文日期:2016-06-20
译者:Crystal Sun;校对:numbbbbb;定稿:千叶知风

好吧,好悲伤,我今年没能参加 WWDC 大会 😢,只能看视频 🎥 和 Twitter。我打赌你们肯定都看了发布会的重要内容(至少看了 keynote)和各个平台的新动态 🎉。不过你知道那些悄悄加进去的新 API 吗?🕵

列出这个清单的目的

每年 WWDC 的问题就是会发布成吨的信息、通知、视频,以至于都没有时间来观看和体验所有东西!

列这个清单并不是想让你看到精疲力尽,只是帮你发现一些你可能会遗漏的主题。有了这个清单,你就能够决定花时间看哪些 WWDC 的视频、阅读哪些文档、以及在 playground 里体验哪些新的 API…当然前提是你有时间。

阅读全文