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

阅读全文

作者:Soroush Khanlou,原文链接,原文日期:2016/8/8
译者:Cwift;校对:Crystal Sun;定稿:CMB

译者注:英文原文发布时间较早,故原文代码中的 Swift 版本较旧,但是作者已将 GitHub 上的 Promise 示例代码更新到了最新 Swift 版本,所以译者在翻译本文时,将文章里的代码按照 GitHub 上的示例代码进行了替换,更新成了最新版本的 Swift 代码。

上周,我写了一篇介绍 Promise 的文章,Promise 是处理异步操作的高阶模块。只需要使用 fulfill()reject()then() 等函数,就可以简单自由地构建大量的功能。本文会展示我在 Promise 方面的一些探索。

阅读全文

作者:Natasha The Robot,原文链接,原文日期:2017-03-12
译者:saitjr;校对:Crystal Sun;定稿:CMB

几个月前,我在 iOS Conf SG 上做了名为 创建 Feature,而不是 App 的分享(你可以在这里查看完整分享)。在 WWDC 2016 之后,我清晰地认识到今后的发展不是一个大一统的 App,而应该拥有各种小功能的 Feature。想想 Apple Watch,Widget,可交互的 Notifications,App Search,iMessage 贴纸,地图这些数不胜数的应用。

阅读全文

作者:Erica Sadun,原文链接,原文日期:2016-10-08
译者:粉红星云;校对:Crystal Sun;定稿:CMB

McFly 问到:我在这个地方一直报错:"不能将 ·String? 变量强制转换为 NSString",而且我在 stackoverflow 上也没有找到解决方法。

先回答这个问题,在转换成其他类型之前必须将可选类型解包。String? 指的是一个存储在可选类型枚举(Optional enumeration)中的值,可以是有值的也可以为空。这就是报错的原因了。

阅读全文

作者:Tomasz Szulc,原文链接,原文日期:2016-07-30
译者:智多芯;校对:Crystal Sun;定稿:CMB

同时负责两个项目是个探索应用架构的好机会,可以在项目中试验一下已有的想法或刚学到的知识。我最近学习了如何封装一个网络层框架,说不定对你有所帮助。

如今的移动应用几乎都是“客户端-服务端(client-server)”架构,在应用里都会有网络层,大小不同而已。我见过很多种实现方式,但都有一些缺陷。当然这并不是说,我最近实现的这个一点缺陷也没有,但至少在目前的两个项目上都运行的很不错。测试覆盖率也将近百分百。

本文涉及的网络层仅限发送 JSON 请求给后端,也不会太复杂。该网络层会和亚马逊 AWS 通信,然后向它发送一些文件。这个网络层框架能容易地扩展其他功能。

阅读全文