作者:Jordan Morgan,原文链接,原文日期:2018-05-18
译者:石榴;校对:numbbbbbNemocdz;定稿:Pancf

Swift 刚出现的时候,我们因它比 Objective-C 简洁而着迷。接着它很快打开了面向协议编程的大门。并且,让我们忘掉引用类型和类,还有很多。

确实,这些东西都是很棒的工具,都有优秀的用例。但我感觉它们经常被捧作银弹,在决定架构时缺乏足够的考虑。

阅读全文

作者:Ruslan Serebriakov,原文链接,原文日期:2019-01-10
译者:Sunset Wan;校对:numbbbbbNemocdz;定稿:Pancf

让我们想象这样一个场景:你有一个很成功的应用程序,这个应用程序有大量的日活用户并且崩溃率为 0。你很开心并且认为生活很美好。但是某天开始,你在应用商店上看到关于应用程序总是崩溃的负面评价。检查 Fabric 也没有起到任何帮助————没有出现新的崩溃记录。那么,这个现象可能是什么原因呢?

答案是内存不足(Out Of Memory),从而导致应用程序运行终止。

阅读全文

作者:Soroush Khanlou,原文链接,原文日期:2018-12-17
译者:RocZhang;校对:numbbbbbWAMaker;定稿:Pancf

在 Dave Abraham 的 WWDC 演讲 Embracing Algorithms(拥抱算法)中,谈到了要发现通用的算法,并将其提取到通用且可测试的函数中。在这个方向上,我发现一些对集合类型的多次操作可以被聚齐起来,合并成单次操作。并且通常情况下,这些操作被合并之后还能带来性能上的收获。

阅读全文

作者:Mattt,原文链接,原文日期:2019-05-06
译者:ericchuhong;校对:numbbbbbWAMaker;定稿:Pancf

长期以来,iOS 开发人员一直被一个奇怪的问题困扰着:

“如何对一张图像进行渲染优化?”

这个令人困扰的问题,是由于开发者和平台的相互不信任引起的。各种各样的代码示例充斥着 Stack Overflow,每个人都声称只有自己的方法是真正的解决方案 —— 而别人的是错的。

阅读全文

作者:Russ Bishop,原文链接,原文日期:2018-11-08
译者:俊东;校对:numbbbbbWAMaker;定稿:Pancf

这篇文章记录了我所收获的小惊喜。在 Swift 中写扩展让人感觉非常自然。

我认为 UnsafeMutableRawBufferPointer.baseAddress 是可选项这回事非常不合理。在实践中它会使代码变得丑陋。我也不喜欢在分配时指定对齐方式;在大多数平台上,合理的默认值都是 Int.bitWidth / 8

通过扩展,我们可以很容易地解决这些问题。这样的解决方案能像标准库一样自然地使用。

阅读全文

作者:Mattt,原文链接,原文日期:2019-05-13
译者:雨谨;校对:numbbbbbWAMaker;定稿:Pancf

软件开发最佳实践 规定了 配置与代码的严格分离。然而,苹果平台上的开发人员常常难以将这些指导原则与 Xcode 繁重的项目工作流程结合起来。

了解每个项目设置的功能以及它们之间如何交互,是一项需要多年磨练的技能。但 Xcode 将大部分的这类信息都都深埋在其图形化界面中,这对我们没有任何好处。

阅读全文

作者:Ole Begemann,原文链接,原文日期:2019-02-18
译者:jojotov;校对:numbbbbbWAMaker;定稿:Pancf

新推出的 Swift 社区播客第一集 中,Chris Lattner, Garric Nahapetian, 和 John Sundell 讲述了关于 Swift 起源的故事和 Swift 社区的现状。

本文是我整理出的一些比较有趣的东西(为了能更好地阅读而做了部分修改)。你可以看到我主要引用了 Chris Lattner 的讲话,因为我认为他对于 Swift 是如何被创造出来的描述是最值得保留下去的。但这并不代表 John 和 Garric 所说的东西没那么有趣。你真的应该去完整地收听整集播客——反正所花的时间和阅读本文相差无几。

阅读全文

作者:Jordan Morgan,原文链接,原文日期:2018-12-11
译者:Nemocdz;校对:numbbbbbWAMaker;定稿:Pancf


俗话说得好,最好的相机是你身边的那个。那么毫无疑问 - iPhone 可以说是这个星球最重要的的相机。而这在业界也已经达成共识。

在度假?不偷偷拍几张记录在你的 Instagram 故事里?不存在的。

出现爆炸新闻?查看 Twitter,就可以知道是哪些媒体正在报道,通过他们揭露事件的实时照片。

等等……

正因为图像在平台上无处不在,如果管理不当,很容易出现性能和内存问题。稍微了解下 UIKit,搞清楚它处理图像的机制,可以节省大量时间,避免做无用功。

阅读全文

作者:Mattt,原文链接,原文日期:2019-01-07
译者:雨谨;校对:numbbbbbYousanflics;定稿:Pancf

作为软件开发人员,我们学到的第一课是如何将概念和功能组织成独立的单元。在最小的层级上,这意味着思考类型、方法和属性。这些东西构成了模块(module)的基础,而模块又可以被打包成为 library 或者 framework。

在这种方式中,import 声明是将所有内容组合在一起的粘合剂。

阅读全文

作者:Benedikt Terhechte,原文链接,原文日期:2019-02-24
译者:WAMaker;校对:numbbbbbBigNerdCoding;定稿:Pancf

假设你正在开发一款社交网络应用,其中包含了一个带有关注按钮和点赞按钮的用户图片展示组件。同时,为了满足单一功能原则(single responsibility principle)和视图控制器的构成,点赞关注的实现应该另有它处。社交网络不仅有高级账户,也有企业账户,因此 InteractiveUserImageController(命名从来不是我的强项) 要能满足一系列的配置选项。以下是这个类一个可能的实现(为作展示,示例代码保留了不少可改进的地方):

阅读全文

作者:Andrew Jaffee,原文链接,原文日期:2018-03-20
译者:灰s;校对:numbbbbbWAMaker;定稿:Pancf

对于开发者来说,复杂性是最大的敌人,因此我会去了解那些可以帮助我管理混乱的新技术。Swift 中的“面向协议编程”(POP)是最近(至少自2015年以来)引起广泛关注的“热门”方法之一。在这里我们将使用 Swift 4。在我自己编写代码时,发现 POP 很有前途。更吸引人的是,Apple 宣称 “Swift 的核心是面对协议的”。我想在一个正式的报告中分享关于 POP 的经验,一篇关于这个新兴技术清晰而简洁的教程。

我将解释关键概念,提供大量代码示例,无法避免的将 POP 和 OOP (面向对象编程)进行比较,并对面向流行编程(FOP?)的人群所声称的 POP 是解决所有问题的灵丹妙药这一说法进行泼冷水。

面向协议编程是一个很棒的新工具,值得添加到你现有的编程工具库中,但是没有什么可以代替那些经久不衰的基本功,就像将大的函数拆分成若干个小函数,将大的代码文件拆分成若干个小的文件,使用有意义的变量名,在敲代码之前花时间设计架构,合理而一致的使用间距和缩进,将相关的属性和行为分配到类和结构体中 - 遵循这些常识可以让世界变得不同。如果你编写的代码无法被同事理解,那它就是无用的代码。

学习和采用像 POP 这样的新技术并不需要绝对的唯一。POP 和 OOP 不仅可以共存,还可以互相协助。对于大多数开发者包括我自己,掌握 POP 需要时间和耐心。因为 POP 真的很重要,所以我将教程分成两篇文章。本文将主要介绍和解释 Swift 的协议和 POP。第二篇文章将深入研究 POP 的高级应用方式(比如从协议开始构建应用程序的功能),范型协议,从引用类型到值类型转变背后的动机,列举 POP 的利弊,列举 OOP 的利弊,比较 OOP 和 POP,阐述为什么“Swift 是面向协议的”,并且深入研究一个被称为 “局部推理” 的概念,它被认为是通过使用 POP 增强的。这次我们只会粗略涉及一些高级主题。

阅读全文

作者:Jordan Morgan,原文链接,原文日期:2017-02-11
译者:郑一一;校对:numbbbbbpmst;定稿:Pancf

有句话之前我提过,今天还想再说一次。那就是打铁还需自身硬。对于自身能力的严格要求,可以帮助实现我们所有梦寐以求的东西。

说起来可能有些消极,知识毕竟是永远学不完的。不论如何,今天 我们先来学习一下 Swift 中的每一个关键字(V3.0.1),在介绍每个关键字的时候,同时会附带一段代码加以说明。

在这些关键字之中,会有你熟悉或者不熟悉的部分。但为了最好的阅读和学习体验,我把它们全部列出来了。文章篇幅有些长,你准备好了么?

让我们现在就开始吧。

阅读全文

作者:Mattt,原文链接,原文日期:2018-12-17
译者:WAMaker;校对:numbbbbbBigNerdCoding;定稿:Forelax

在这个给予的季节,让我们停下脚步,思考一个现代计算机系统赐予我们的最棒的礼物:抽象。

在数百万 CPU 晶体管、SSD 扇区和 LCD 像素共同协作下,全球数十亿人能够日常使用计算机和移动设备而对此全然不知。这一切都应归功于像文件,目录,应用和文档这样的抽象。

这周的 NSHipster,我们将讨论苹果平台上两个重要的抽象:包与包裹。🎁

阅读全文

作者:Ole Begemann,原文链接,原文日期:2018-11-29
译者:WAMaker;校对:numbbbbbBigNerdCoding;定稿:Forelax

函数式编程语言的一个常用范式是把一个列表切分为头部(第一个元素)和尾部(其余元素)。在 Haskell 中,x:xs 会匹配非空列表,将头部绑定给变量 x,尾部绑定给 xs。

Swift 不是一门函数式编程语言。既没有内置的 List 类型,也没有集合的特定匹配语法。[1]

阅读全文