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

作者:Erica Sadun,原文链接,原文日期:2016-07-07
译者:粉红星云;校对:aaaron7;定稿:千叶知风

你好,
我想知道针对下面这个在 Swift 中出现的特定情况是否有更优雅的解决方法 – 假设你想要在继续执行后续的代码前,检测一个特定的变量是否为空;通常是会做相反的事情(检测变量是否为有值)。我一般是这么写的:

guard thing == nil else {
if let thing = thing {
doSomething(withThing: thing)
}
return
}

有没有一个更好的方式来实现呢?我是可以使用 if 语句,但是我喜欢 guard 语句确保验证不通过不执行下面代码。逻辑上如果强制解包也可以,但是。。。(耸肩)

阅读全文

作者:Erica Sadun,原文链接,原文日期:2016/06/28
译者:Cwift;校对:pmst;定稿:Cee

昨晚我发了一条推特邀请开发者们参与一个问题的调查。相当一部分人问我这个调查是怎么回事。

Swift 标准库中一些类型转换相关的协议,Matthew Johson 和我观点相同,认为命名非常糟糕。标准库中大约存在 80 个古怪的协议,其中大约 15% 都与类型转换相关。

因此我们递交了一份有关重命名的提案,不过最终被否决了。标准库团队倾向于使用新的 Syntax 命名空间,而我们的提案侧重于命名方面的指导。他们的答复是具体问题具体分析,在不违背哲学的前提下,Swift 的革新提案需要着眼真实世界进行设计,而不是单纯的理论指导。我和标准库团队没能达成共识,不过讨论还在持续,因为 WWDC 过后这些问题还是没能得到解决。最近 Matthew Johson 已经在起草一份新的提案了。

阅读全文

作者:Andyy Hope,原文链接,原文日期:2016/07/20
译者:冬瓜;校对:Darren;定稿:千叶知风

↑ ↑ ↓ ↓ ← → ← → B A

无论 Swift 是你的第一门开发语言,还是从 Objective-C 转来,Swift 这门强大的语言都值得我们去学习和使用,但是 Swift 语法的不断迭代更新可能会令你畏惧。本文将会列举一些常见的语法,来帮助你提高 Swift 语言能力,精炼代码。

闭包(Closure)

() -> Void

有些文章中也会称作匿名函数(unnamed functions),类似于 C 或 Objective-C 中的 block ;闭包是一个很轻量但是功能十分强大的函数,常用于类间的值传递,闭包通常作为函数的参数来使用,当然也可以作为变量。

阅读全文

作者:Reda Lemeden,原文链接,原文日期:2016-04-28
译者:wiilen;校对:bestswifter;定稿:CMB

这篇文章是 构建 iOS 界面 系列的第四篇,本篇重点介绍:在没有原生系统编程经验的情况下,如何实现 iOS 的设计 —— 这对 Web 设计师及开发者们来说是极好的。这里也提供前面几篇文章:第一部分 - 第二部分 - 第三部分

上一篇文章中,我们交替使用 Interface Builder 和 Swift,实现了一个自定义的按钮 —— 如果你一遍又一遍重复这个过程,除非你开发的是一个手电筒 App,UI 上只有一个按钮,不然这项工作很快就会让人心累。即便不谈无聊的重复工作,如果只更新一点功能上的细节,也需要对每一个按钮的实例进行修改,这种做法也是不靠谱的。下面我们将介绍一种更好的方法。

阅读全文

作者:Mike Ash,原文链接,原文日期:2016-02-19
译者:littledogboy;校对:Cwift;定稿:CMB

本周最大的科技新闻是 FBI 正试图迫使苹果公司解锁一个嫌疑人的 iPhone。有趣的是,涉案手机的型号是老款的 iPhone 5c。新款的 iPhone 中加入了苹果的 Secure Enclave(安全区域)技术,用来防止手机被暴力破解,甚至连苹果自己都无法破解。这件事过后许多朋友都在问一个问题:什么是 Secure Enclave?它扮演了什么角色?

在我开始写之前声明一下: 我平时写文章的习惯是一直深入到比特和字节,然后再讨论发生了什么。但这次必定有所不同,因为我这种凡夫俗子是触及不到安全区域的本质的。因此本文中大部分的知识来自苹果 iOS 信息安全指南,又添加了一些通用的理论。参考指南中安全区域的相关信息,解释并且思考它们的含义。这篇文章建立在苹果提供了准确信息的假设上,因为从外部没有可行的方法来检测这些信息的真实性。因此最终检测结果将基于苹果文档的准确性,和我自己的理解,这点读者需要注意。

而且,此文章是为了调研本案的技术和安全区域技术。对 FBI 的要求,苹果的回应,任何其他政治问题,没有任何意见和暗示。如果你想在此讨论政治问题,出门右转。

找准了方向,让我们开始吧。

阅读全文

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

更新:
2016-08-02
为 Xcode 8 beta 4 更新代码

本系列其他文章:

(1) Measurements 和 Units 概览

(2) 乘法和除法(本文)

(3) 内容提炼

感谢 Chris EidhofFlorian Kugler 帮助我想出这个解决方案。

上篇文章结束时,我就计划实现一个通用的、声明式的方案来描述物理量间依赖关系的解决方案,例如 速度 = 长度 / 时间。现在,让我们来具体实现这个想法吧。

阅读全文

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

上周,我参加了 iOSDevCampDC 并发表了演讲,在这里很荣幸的听到了 @atomicbird 关于 StackViews 的演讲。我之前写过一篇文章,向大家介绍了使用 StackViews 来做简易动画的有多方便,更被使用 StackViews 能够非常简单地完成横竖屏的切换所震惊。

例如,下面这个简单的有着一张图片和一些文本的视图。它在竖屏下看起来挺好的,但是一旦屏幕旋转了,就不那么好看了…

阅读全文

极少数应用程序很“奢侈”的只支持最新版本的 iOS。 设置一个较低的部署目标以及基于特定 iOS 版本的代码分支通常是很有必要的。虽然苹果公司的信息有些矛盾,还是有各种办法来完成这个。最近在这条 tweet上看到有人警告说,不要这样做:

#define IsIOS7 ([[[[UIDevice currentDevice] systemVersion] substringToIndex:1] intValue]>=7)

GitHub 搜索显示,有超过 8000 的结果调用了 substringToIndex:1 。所有这些代码碰到 iOS 10 就“懵逼”了。因为 iOS 10 会被检测成 iOS 1 了,估计只有在越狱的应用中才会出现吧。

又是同样的老故事。Windows 9 变成 Windows 10 是因为有太多代码通过 if (name.startsWith("windows 9")) 来检查 Windows 95 和 98 了。

阅读全文

作者:Andyy Hope,原文链接,原文日期:2016-04-06
译者:Darren;校对:pucca601;定稿:CMB

如果说 Log 是一种时尚,那你就是时尚设计师。

Swift beta 版一出世,社区中最具好奇心的开发者们立刻上了这班车,对新版语言的特性进行试验,并撰文讨论他们从中获取的经验。
关于 Swift, 有太多提到 Tailor Swift 的 Twitter 了以至于我没办法列举出最好的, 但直到现在这也很有趣,没有人知道为什么😂。另一个人们讨论得很多的话题是 Swift 代码中可以使用 emoji 表情了。

func combinedWeatherConditions(lhs: Int, _ rhs: Int) -> Int {
return lhs + rhs
}
let 🌨 = -10, 🌤 = 10, 💧 = 0
if combinedWeatherConditions(🌨, 🌤) == 💧 {
print(“😔 — No 🏂 Today.”)
}

我纯粹是因为表情功能而开始写 Swift 的。—— 没有人这样说

这是一个非常新颖的特性,尽管你也许永远不会需要在你的代码里使用 emoji 或者用在打印语句中。但是既然我们讲到了打印语句,在新的控制台上 print 语句相比古老的前身 NSLog 已经被优雅地简化了。

阅读全文

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

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

关联类型系列文章

有时候我认为类型理论是故意弄的很复杂,以及所有的那些函数式编程追随者都只是胡说八道,仿佛他们理解了其中的含义。真的吗?你有一篇 5000 字的博客是写关于插入随机类型理论概念的吗?毫无疑问,没有。而且这种理论无法阐述你必须要关注它的原因,以及通过这种高大上的概念能解决什么样的问题。我想把你装进麻袋里,然后把麻袋扔到河里,最后把河丢到一个巨大的中。

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

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

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

阅读全文

作者:Jason Newell,原文链接,原文日期:2016-06-28
译者:冬瓜;校对:numbbbbb;定稿:numbbbbb

这是一个 iOS 10 系列教程,会介绍 iOS 10、Swift 和 XCode 8 的新特性。

UIKit in iOS 10 now has “new object-based, fully interactive and interruptible animation support that lets you retain control of your animations and link them with gesture-based interactions” through a family of new objects and protocols.

iOS 10 的 UIKit 使用一系列新对象和 protocol 来控制用户交互和中断动画,支持用手势操作。

简言之,iOS 10 可以让开发者更加自由宽松地控制动画计时。你可以细粒度控制自己制作的动画,易于抹除、逆向、暂停和重启动画,并重构动画帧使之平滑流畅。这些功能也可以用于控制器的转场动画。

我希望通过此文介绍一些关于新特性的基本用法,并记录一些在文档中的关键点。

阅读全文

作者:Erica Sadun,原文链接,原文日期:2016-05-11
译者:pucca;校对:wiilen;定稿:CMB

昨天在 Swift-Users 有人提问如何防止序列(sequence)为空。这个问题来源于如何在断言(predicate)中测试一个序列,由此引发的问题是如果序列为空,会返回 true 来满足断言。

阅读全文

作者:COSMIN PUPĂZĂ,原文链接,原文日期:2016/06/29
译者:saitjr;校对:Cee;定稿:CMB

Apple 在 WWDC 上已将 Swift 3 整合进了 Xcode 8 beta 中,并会在今年晚些时候发布 Swift 3 的正式版。这是 Swift 在开源和支持 Mac OS X 与 Linux 之后的首个版本。如果你在去年 11 月关注了 Swift 进化史 和已经启动的 IBM 沙盒 项目,那你应该知道 Swift 确实改动很多。甚至可以确定你在 Xcode 8 上根本无法编译既有项目。

阅读全文

作者:AppCoda,原文链接,原文日期:2016-05-19
译者:Prayer;校对:numbbbbb;定稿:CMB

排着长队等待结账的商店,帮助旅客记录包裹和航班信息的机场,帮助大型零售商处理大量无聊的存货清单,这些场景非常适合使用条码扫描器。此外,条码扫描器也能帮消费者进行智能购物和产品分类。既然它这么棒,不如我们在 iPhone 上做一个吧!

幸运的是,对 Apple 开发者来说,实现条码扫描非常容易,苹果大法好!我们会使用 AV Foundation 来实现一个小巧的 iPhone app,能够扫描 CD 上的条码,获取专辑的一些重要信息,并将内容输出到 App 视图中。能够实现读取条码的功能,这非常的酷,但是我们的野心不止于此,我们会对识别的条码内容作进一步的操作。

我本不该再多啰嗦,不过还是友情提醒一下,这个条码扫描 app 只有在设备具有摄像头时才能正确工作。记住这一点,准备一台有摄像头的 iOS 设备,我们开始吧!

阅读全文

不久之前,在我写的好与坏,Swift面面观 Part1一文中,我介绍了一些关于在 Swift 里怎样去写出优秀代码的小技巧。在 Swift 发布到现在的两年里,我花费了很长时间去牢牢掌握最佳的实践方法。欲知详情,请看这篇文章:好与坏,Swift面面观 Part1.

注:好与坏,Swift面面观 Part1 译文链接

在这个系列的文章中,我将尝试提炼出我认为的 Swift 语言中好与不好的部分。唔,我也希望在未来有优秀的 Swift 开发者来帮助我征服 Swift (唔,小伙子,别看了,中央已经决定是你了,快念两句诗吧)。如果你有什么想法,或者想告诉我一点作为开发者的人生经验什么的话,请在 Twitter 上联系我,我的账号是 ksmandersen

好了废话不多说,让我们开始今天的课程吧。

阅读全文

作者:Andyy Hope,原文链接,原文日期:2016-03-18
译者:BigbigChai;校对:shanks;定稿:CMB

并不是世外桃源,但也很不错!

很高兴见到 Objective-C 的老司机对于 Swift 的新鲜语法结构和新思维方式感到如此兴奋。作为开发者,我们应该永远努力拓展我们的技能,并在新的范式出现的时候乐于改变我们的心态。

一个类似的例子就是处理数据结构的时候,拥抱不可变性,尽量使用常量,这是一个很好的建议而且完全应该被采用。另一个例子是把我们的数据模型转换为 Struct(结构体)。这是听起来很美好,但在实际运用中,彻底地使用 Struct 来代替 Class(类),还是给开发者带来很多困难。

不要误会我的意思,用 Struct 作为数据模型确实带来了非常大的好处。 只是这并不是完美的办法。在这篇文章中,我会详细说明一下当你把数据模型从 Class 转换成 Struct 时会遇到的麻烦。

阅读全文