作者: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]

阅读全文

作者:APPCODA EDITORIAL TEAM,原文链接,原文日期:2019-01-07
译者:Roc Zhang;校对:pmstnumbbbbb;定稿:Forelax

在计算机科学中,有很多问题可以通过将底层数据结构用优先级队列实现来改善算法的时间复杂度。其中 Dijkstra 的最短路径算法便是一个例子,该算法使用了优先级队列来在图中搜索两个顶点间的最短路径。

不幸的是,Swift 的标准库中并没有提供优先级队列的默认实现。所以我们将会研究如何自行实现基于堆的优先级队列。

阅读全文

作者:Olivier Halligon,原文链接,原文日期:2018-12-15
译者:Nemocdz;校对:numbbbbbYousanflics;定稿:Forelax

StringInterpolation 协议最初的设计效率低下又不易扩展,为了在后续的版本中能够将其彻底重构,Swift 4 中将该协议标记为废弃。即将在 Swift 5 中亮相的 SE-0228 提案介绍了一种新的 StringInterpolation 设计,使得 String 有了更大的潜能。

阅读全文

作者:Andrew Jaffee,原文链接,原文日期:2018-04-17
译者:灰s;校对:Ceenumbbbbb;定稿:Forelax

作为 iOS 开发,我们十分清楚人们都喜欢互通性。我们喜欢通过无线设备与其他人进行沟通这一点是显而易见的。最近,我们开始希望能够与那些曾经被认为是独立的普通设备进行通信。我们开始喜欢,甚至是期望,部分无线设备可以收集并且分析自己的数据(通常称为“可穿戴设备”)。许多设备已经成为我们生活里的一部分,还为还有一个专门的术语来描述它:“Internet of Things” 或者 “IoT”(物联网)。现在地球上有数十亿的无线通讯设备。在这篇教程中,我们将聚焦 IoT 其中的一部分:蓝牙。

我将说明蓝牙技术背后的基本概念,以及:

  • 展示如何精通蓝牙方向的软件开发,从而为你提供巨大的职业机遇
  • 提醒你必须去确认在发布一个使用蓝牙技术的应用时是否需要通过“资格审查”
  • 给你提供 Apple 的Core Bluetooth 框架概述 (也可以参阅这里)
  • 最后,带领你使用 Swift 4 并通过 Core Bluetooth 和一个蓝牙设备来开发一款用于监控心率的 iOS 应用程序

提示:注意跟随阅读文章中包含的超链接。对于开发者这是重要的资料,它确保你完全理解蓝牙的工作方式以及苹果是如何支持蓝牙这种技术的。

阅读全文

作者:Olivier Halligon,原文链接,原文日期:2018-09-02
译者:灰s;校对:numbbbbb小铁匠Linus;定稿:Forelax

在 Swift 中,协议中声明的属性没有访问控制的能力。如果协议中列出了某个属性,则必须使遵守协议的类型显式声明这些属性。

不过有些时候,尽管你会在协议中声明一些属性,但你是要利用这些属性来提供你的实现,并不希望这些属性在类型的外部被使用。让我们看看如何解决这个问题。

阅读全文