作者:Arthur Knopper,原文链接,原文日期:2017-04-18
译者:Crystal Sun;校对:way;定稿:shanks

Sprite Kit 里,精灵(译者注:精灵的英文单词为 Sprite,计算机图形学,指包含于场景中的二维图像或动画)运动的机制是使用动作(actions)。将某种类型的动作添加到一个节点(node)上,Sprite Kit 自动更新位置直到动作完成。更棒的是,可以将多个动作(actions)组合起来。在本节教程中,我们将学习如何给精灵添加动作。本节教程使用 Xcode 8.3 和 iOS 10.3。

阅读全文

作者:Dominik Hauser,原文链接,原文日期:2016-03-28
译者:Doye;校对:way;定稿:shanks

在阅读 obc.io关于轻量级的viewConroller相关讨论之后,每隔几个月我都会反思怎样做才是TableviewController 的最佳实践,我曾经尝试过几种不同的方法包括把 datasource 和 delefate 放到一个独立的类中或者使用 MVVM 架构来对 Cell 进行定制。

本篇是在 2016 年我对这个问题的思索,而且我对这个方案十分满意,方案涉及到了泛型,协议,和值类型。

阅读全文

作者:Arthur Knopper,原文链接,原文日期:2017-04-04
译者:Crystal Sun;校对:way;定稿:shanks

译者注:本文是之前一篇文章的更新版本,旧文链接,旧文使用的 Swift 版本不是 3.0,本文更新了代码,升级到了 Swift 3.0。

属性字符串(Attributed Strings)可以为文本赋予各种各样的属性,还能一次给(部分)文本赋值多个属性。在本节教程中,将学会给 label 文本里的每个单词各设置不一样的样式。本节教程使用的是 Xcode 8 和 iOS 10。

阅读全文

作者:Jesse Squires,原文链接,原文日期:2017-06-15
译者:四娘;校对:Cwift;定稿:shanks

WWDC 已经过去一周了,你有大概了解你的代码要怎么迁移到 Swift 4 吗?我最先接触到的是一堆警告,提示有多余的协议遵守,查证得知这是个 bug。但说回来,比起去年我花了两个星期迁移到 Swift 3 来说,这次的升级已经好很多了。

而且,牢记 Swift 3.2 版本实际是在 Swift 3 兼容模式下运行 Swift 4 的编译器(-swift-version 3,通过这届 WWDC,我理解了很多东西)。当你在浏览 bugs.swift.org 时记住这一点也会很有帮助。

阅读全文

作者:Arthur Knopper,原文链接,原文日期:2017-01-09

译者:Crystal Sun;校对:walkingway;定稿:CMB

长按所选的对象后,弹出文本菜单(Context Menu),允许用户进行剪切、复制、粘贴操作。默认情况下,文本菜单功能在 Table View 中是关闭状态。在本节教程中,将学习如何在 Table View Cell 中开启文本菜单功能,将所选的文本复制到 Text Filed(文本输入框)中。本节教程使用的是 Xcode 8.1 和 iOS 10。

阅读全文

1 背景

英文原文:
http://ryanipete.com/blog/ios/swift/objective-c/uidebugginginformationoverlay/

我写得这个并不是翻译而是用自己的理解重新表述这个功能,和原文内容有出入,有能力的可以查看英文原文。

我们经常使用各种调试工具,或者开源库来支持悬浮窗调试信息,但苹果的私有方法就提供了 UIDebuggingInformationOverlay

阅读全文

作者:Ole Begemann,原文链接,原文日期:2017-03-20
译者:四娘;校对:Cwift;定稿:CMB

大概一个星期之前,Swift 核心团队成员 Ben Cohen 在 Swift-Evolution 发了一条的很值得思考的信息,回答了一个问题 — 再给 Swift 4 提一个新提案, 被通过的几率有多大。

Ben 阐述了核心团队决定提案是否要推迟的主要依据。主旨就是 Swift 每一个版本都应该专注于一小部分主题,符合主题的提案给予更高的优先级。

阅读全文

作者:Umberto Raimondi,原文链接,原文日期:2016-10-27
译者:shanks;校对:Crystal Sun;定稿:CMB

每当处理循环引用(retain cycles)时,需要考量对象生命周期来选择unowned或者weak标识符,这已经成为了一个共识。但是有时仍然会心存疑问,在具体的使用中应该选择哪一个,或者退一步讲,保守的只使用 weak 是不是一个好的选择呢?

本文首先对循环引用的基础知识做一个简要介绍,然后会分析 Swift 源代码的一些片段,讲解 unownedweak 在生命周期和性能上的差异点,希望看完本文以后,在的使用场景中,能使用正确的弱引用类型。

阅读全文

作者:Gregg Mojica,原文链接,原文日期:2016-09-06
译者:智多芯;校对:Crystal Sun;定稿:CMB

Core Image 是 Cocoa Touch 框架提供的功能强大的 API,是 iOS SDK 中常常被忽视的关键部件。本教程将尝试探索 Core Image 提供的人脸识别功能,并将其应用到 iOS App 中。

注:这是中高级 iOS 教程,本教程假设你已经使用过类似 UIImagePicker,Core Image 等技术。如果你对这些还不熟悉,先看看我们的 iOS 教程系列,等你准备好了再看这篇文章。

阅读全文

作者:IOSCREATER,原文链接,原文日期:2016/02/08
译者:EyreFree;校对:DianQK;定稿:CMB

为多个对象创建多个 Outlet 是比较费时费力的一件事情。而且多个对象也可能共享同一个的 Outlet。在本教程中,我们将会根据按钮的 tag 值来创建多个 Outlet。本教程使用 Xcode 7.2 作为开发工具,使用 Swift 2.1 和 iOS 9 进行构建。

阅读全文

作者:KHANLOU,原文链接,原文日期:2017-03-28
译者:四娘;校对:Cwift;定稿:CMB

Swift 标准库里最容易被滥用的就是 Sequence 的 enumerated() 函数。这个函数会返回一个新的序列,包含了初始序列里的所有元素,以及与元素相对应的编号。

enumerated() 很容易被误解。因为它给每一个元素都提供了一个编号,对于很多问题来说这是一个很简便的方案。然而,这些问题大多数都可以被另一种方式更好的解决,让我们来看一下其中的一些例子吧,要注意理解它们有什么问题,然后如何使用更好的抽象去解决它们。

阅读全文