作者:Joe,原文链接,原文日期:2016-09-20
译者:Cwift;校对:walkingway;定稿:CMB

当你在想要 大规模重命名 时,一个附带的挑战就是要确保所有相关的文档都必须同步更新。比如,截至到 2016 年 9 月 20 日,DateFormatter 的文档依旧没有与版本统一,引用的是 Swift 2.3 风格的 API(译者注:现在是 2017年,文档依旧没有更新...)。随着时间的推移,这些疏漏毫无疑问都会被纠正,这里是一些使用 Date 以及 DateFormatter 实现的日期格式化的示例。

官方文档中当前的示例如下:


let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .mediumStyle
dateFormatter.timeStyle = .noStyle let date = Date(timeIntervalSinceReferenceDate: 118800) // US English Locale (en_US)
dateFormatter.locale = Locale(localeIdentifier: "en_US")
NSLog("%@", dateFormatter.stringFromDate(date)) // Jan 2, 2001 // French Locale (fr_FR)
dateFormatter.locale = Locale(localeIdentifier: "fr_FR")
NSLog("%@", dateFormatter.stringFromDate(date)) // 2 janv. 2001 // Japanese Locale (ja_JP)
dateFormatter.locale = Locale(localeIdentifier: "ja_JP")
NSLog("%@", dateFormatter.stringFromDate(date)) // 2001/01/02

在 Swift 3.0 中变为:


let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .none

注意 .mediumStyle 被简化为 .medium。这种简化符合规则,我们知道类型是 DateFormatter.Style 所以没有理由重复 Style 一词。使用 .none 替换 .noStyle 也是同理。

现在看看设置格式化器的环境时发生的改动:


// US English Locale (en_US)
dateFormatter.locale = Locale(identifier: "en_US")
print(dateFormatter.string(from:date)) // Jan 2, 2001 // French Locale (fr_FR)
dateFormatter.locale = Locale(identifier: "fr_FR")
print(dateFormatter.string(from:date)) // 2 janv. 2001 // Japanese Locale (ja_JP)
dateFormatter.locale = Locale(identifier: "ja_JP")
print(dateFormatter.string(from:date)) // 2001/01/02

再一次,我们看到了从 Locale(localeIdentifier:)Locale(identifier:) 的简化。减少了类型名及其引用。类似地,DateFormatterstringFromDate 方法已经被简化为 string(from:),完整的方法签名是 string(from:Date)。理解这种模式了吗?

继续用一个 String 描述的信息生成一个 Date 对象,苹果的文档展示了这样的示例:


let RFC3339DateFormatter = DateFormatter()
RFC3339DateFormatter.locale = Locale(localeIdentifier: "en_US_POSIX")
RFC3339DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
RFC3339DateFormatter.timeZone = TimeZone(forSecondsFromGMT: 0) let string = "1996-12-19T16:39:57-08:00"
let date = RFC3339DateFormatter.dateFromString(string)

为了减少啰嗦和不必要的词汇,得到了下面的写法:


let RFC3339DateFormatter = DateFormatter()
RFC3339DateFormatter.locale = Locale(identifier: "en_US_POSIX")
RFC3339DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
RFC3339DateFormatter.timeZone = TimeZone(secondsFromGMT: 0) let string = "1996-12-19T16:39:57-08:00"
let date = RFC3339DateFormatter.date(from:string)

TimeZone 构造器中删除了无关的三个字符(for),而且正如期望, dateFromString 方法变成了 date(from:)

经验法则

从 Swift 2 转换到 Swift 3 时,一个通用法则是:去除多余的单词。如果你之前习惯了写 formatter.timeStyle = .fullStyle,现在你要习惯 formatter.timeStyle = .full 的写法。如果你看到了 someTypeFromAnotherType() 这样的写法,它可能已经被替换为 someType(from:AnotherType)。说一下我的体验,在使用 Swift 3 几个月时间后,再回到 Swift 2 会感觉命名过于冗长,这还是在我喜欢这种详细自说明语言风格的前提下。不过一旦你学会了 Swift,你会拥抱海明威而避开托尔斯泰。

愉快地 Swift 吧!

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg

使用 Swift 3.0 操控日期的更多相关文章

  1. iOS开发系列--Swift 3.0

    概述 从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行 ...

  2. Swift 3.0 【Swift 3.0 相较于 Swift 2.2 的变化】

    一.编译器和语法变化 函数或方法参数 调用函数或方法时从第一个参数开始就必须指定参数名 在Swift的历史版本中出现过在调用函数时不需要指定任何函数参数(或者从第二个参数开始指定参数名),在调用方法时 ...

  3. Swift 2.x -> Swift 3.0

    Swift 3.0 相对于 2.x 有很大变化.特别是因为命名习惯的改变,导致许多 Api 都发生了变化.总的趋势是让表示更简洁. 对旧的代码升级,大部分可以根据提示来进行更正.但也有的需要手动修改. ...

  4. Swift 2.0 异常处理

    转自:http://www.jianshu.com/p/96a7db3fde00 WWDC 2015 宣布了新的 Swift 2.0. 这次重大更新给 Swift 提供了新的异常处理方法.这篇文章会主 ...

  5. fir.im Weekly - Swift 3.0 的迁移适配指南

    无论你是移动开发者,还是桌面端开发者,或者正在IoT领域探索的技术人员,那么应该更加关注 iDev 全平台开发者大会,也许是后半年 iOS 开发者最盛大的技术盛宴.既有知名公司带来专业视野,又有从 S ...

  6. Swift 3.0首个开发者预览版将在5月12日释出

    Swift团队在博客中宣布Swift 3.0语言首个开发者预览版将于5月12日释出,正式版将在4-6周之后推出.开发者预览阶段并无确定的更新周期和计划,不过Swift团队称努力将其控 制在4-6周内. ...

  7. Swift 3.0 令人兴奋,但Objective-C也有小改进--Objective-C的类属性

    由于Swift 3.0 出了太多令人兴奋的新特性,人们很容易忽略 Objective-C中的小改动.或许你会觉得苹果提及Objective-C 很可能是为了提高和Swift互操作性(译者注:互操作性主 ...

  8. Swift 2.0初探

    转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心. 今年6月,一年一度的WWDC大会如期而至,在大会上Apple发布了Swift 2.0,引 ...

  9. iOS -Swift 3.0 -String(字符串常规用法)

    // // ViewController.swift // Swift-String // // Created by luorende on 16/9/10. // Copyright © 2016 ...

随机推荐

  1. x264

    x264 x264  h264  1. x264调用主要过程 x264_param_default():设置参数集结构体x264_param_t的缺省值. x264_picture_alloc():为 ...

  2. jQuery——开关灯

    js对象与jquery对象的相互转化: 1.$(js对象) 2.$(selector).get(索引).$(selector)[索引] <!DOCTYPE html> <html l ...

  3. Power Designer逆向操作(从mysql5.0生成数据库的物理模型)

    Power Designer逆向操作(从mysql5.0生成数据库的物理模型) 环境:powderdesigner12.5:mysql5.0 步骤: 1.  为指定的数据库配置MySQL的ODBC数据 ...

  4. Codeforces_738B

    B. Spotlights time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  5. FusionCharts 更新 chart data 数据

    var AlarmChart = null; function alarmChartReBuild(totalNum, alarmNum) { var alarmPart = (alarmNum * ...

  6. Python虚拟环境和requirements.txt文件的使用

    参考: https://www.centos.bz/2018/05/centos-7-4-%E5%AE%89%E8%A3%85python3%E5%8F%8A%E8%99%9A%E6%8B%9F%E7 ...

  7. webstrom常用键

    常用快捷键—Webstorm入门指南 提高代码编写效率,离不开快捷键的使用,Webstorm拥有丰富的代码快速编辑功能,你可以自由配置功能快捷键. 快捷键配置 点击“File”-> “setti ...

  8. 【XSY3413】Lambda - 造计算机初步——邱奇-图灵论题与lambda演算

    题意: 关于邱奇-图灵论题的一点思考 这道题起源于计算机科学史上一个非常著名的问题——邱奇-图灵论题,这个论题是可计算性理论的基石,关于它的思考与证明几乎贯穿了整个计算机科学史,涵盖了数学.算法理论. ...

  9. enote笔记语言(4)(ver0.2)——“5w1h2k”分析法

    章节:“5w1h2k”分析法   what:我想知道某个“关键词(keyword)”(即,词汇.词语,或称单词,可以是概念|专业术语|.......)的定义. why:我想知道事物发生的原因.“why ...

  10. UVA1395 Slim Span(kruskal)

    题目:Slim Span UVA 1395 题意:给出一副无向有权图,求生成树中最小的苗条度(最大权值减最小权值),如果不能生成树,就输出-1: 思路:将所有的边按权值有小到大排序,然后枚举每一条边, ...