Swift 周报 #76
dsqlz
7年前
<p>Swift 的 <a href="/misc/goto?guid=4958973376962661127" rel="nofollow,noindex">git 仓库</a> 这周特别忙,这里有一些 GitHub 的数据:</p> <p>除了 Merge 之外,总共有 39 个作者 push 了 156 个 commit 到主分支,所有分支算起来有 284 个 commit。在主分支,401 个文件被修改,增 12589 删 9215 …</p> <p>在 WWDC 结束不久就完成了这么多的事情实属不易,在 Swift 4 立项之后核心团队和别的贡献者完成了惊人的进展。</p> <p>iOS 11 beat 2,tvOS 11 beta 2 和 Swift Playgrounds 2 beta 2 都开放下载了,点击 <a href="/misc/goto?guid=4959751082827228392" rel="nofollow,noindex">此处下载</a> ,遇到 bug 记得要反馈哦!</p> <h2>赞助链接</h2> <p><a href="http://www2.bignerdranch.com/l/299472/2017-06-21/8rxl/?utm_campaign=Swift_Weekly_Brief&utm_medium=email_web&utm_source=Swift_Weekly_Brief_76" rel="nofollow,noindex">提升你的技能 — 成就你的职业生涯</a></p> <p>专家带你入门到精通只需一周时间。</p> <p><a href="http://www2.bignerdranch.com/l/299472/2017-06-21/8rxl/?utm_campaign=Swift_Weekly_Brief&utm_medium=email_web&utm_source=Swift_Weekly_Brief_76" rel="nofollow,noindex">bignerdranch.com</a></p> <h2>Swift Unwrapped</h2> <p>在 <a href="/misc/goto?guid=4959751083001438797" rel="nofollow,noindex">第 17 集:Swift 里的测试</a> ,Jesse 和 JP 讨论了如何使用 Swift 和相应的工具进行测试,保证每一个上线版本都井然有序。</p> <h2>资讯及社区</h2> <p>Greg Heo <a href="/misc/goto?guid=4959751083090532819" rel="nofollow,noindex">写了一篇文章</a> 讲述 Swift 里 Encoder 和 Encodable 的原理,这个新功能会影响到很多开源的软件,了解它的原理更有助于你理解它们相关的 PR。</p> <p>Matt Godbolt 的 <em>探索编译器</em> 现已 <a href="/misc/goto?guid=4959751083168037774" rel="nofollow,noindex">支持 Swift</a> 。(译者注:这是一个学习编译原理的网站,输入代码,就可以看到编译后在对应平台上的汇编码)</p> <p>David Owens 放出了一个 <a href="/misc/goto?guid=4959751083246444223" rel="nofollow,noindex">VSCode 的插件</a> ,让 VSCode 也能支持 Swift。</p> <p>Swift 支援团队 <a href="/misc/goto?guid=4959751083327538741" rel="nofollow,noindex">开源</a> 了 Swift-Evolution 的 App — <a href="/misc/goto?guid=4959751083402223785" rel="nofollow,noindex">Evo</a> 。</p> <p>Steven Hepting <a href="/misc/goto?guid=4959751083489827332" rel="nofollow,noindex">讲述</a> 了 Swift 的 sort() 方法是怎么优化的,这里可以找到相应的 <a href="/misc/goto?guid=4959751083576320773" rel="nofollow,noindex">源码</a> 。</p> <p><a href="/misc/goto?guid=4959751083660620941" rel="nofollow,noindex">Learn Swift 皇后区</a> & <a href="/misc/goto?guid=4959751083736115768" rel="nofollow,noindex">Learn Swift 波兰</a> , 都落下了帷幕。 这是11期 <a href="/misc/goto?guid=4959751083814396189" rel="nofollow,noindex">Learn Swift {城市}</a> 系列的合集!下次会是在哪座城市呢?</p> <p><a href="/misc/goto?guid=4959751083903182057" rel="nofollow,noindex">Brisk,一个反馈 bug 的 macOS app</a> 上线了 <a href="/misc/goto?guid=4959751083974549301" rel="nofollow,noindex">1.0 版本</a> ,并且快速迭代发布了 <a href="/misc/goto?guid=4959751084064623449" rel="nofollow,noindex">1.0.1 版本</a> ,记得要帮忙反馈 bug 哦!</p> <p>元组门又有了更多的 <a href="/misc/goto?guid=4959751084151552052" rel="nofollow,noindex">进展</a> ,这对我来说很有趣,因为 <a href="/misc/goto?guid=4959751084236055426" rel="nofollow,noindex">我个人也使用过类似的方式</a> 。就像 <a href="/misc/goto?guid=4959751084312732336" rel="nofollow,noindex">Slava 指出</a> 的那样,这件事情始终还有 <a href="/misc/goto?guid=4959751084396120331" rel="nofollow,noindex">优化的空间</a> 。(译者注:元组门就是闭包里的元组不再自动展开的事情,前两周的周报都有提到,详情请看 <a href="/misc/goto?guid=4959751084478098150" rel="nofollow,noindex">SE-0029</a> , <a href="/misc/goto?guid=4959676898579345790" rel="nofollow,noindex">SE-0066</a> 和 <a href="/misc/goto?guid=4959751084587532169" rel="nofollow,noindex">SE-0110</a> )。</p> <h2>提交和合并的请求</h2> <p>Ben Cohen 发起一个新的 <a href="/misc/goto?guid=4959751084675492904" rel="nofollow,noindex">合并请求</a> ,让 Substring 可以添加到 Hashable 容器里(详情请看下面的邮件列表讨论)。</p> <p>Itai Ferber <a href="/misc/goto?guid=4959751084758492370" rel="nofollow,noindex">通过了一个合并请求</a> ,修复了 <a href="/misc/goto?guid=4959751084830244590" rel="nofollow,noindex">SR-5277</a> ,让 class 可以与父类共用一个 Encoder/Decoder。更多详情请看这里的 <a href="/misc/goto?guid=4959751084912745654" rel="nofollow,noindex">讨论进程</a> 。</p> <p>Philippe Hausler <a href="/misc/goto?guid=4959751084995601523" rel="nofollow,noindex">通过了一个合并请求</a> ,修复了 <a href="/misc/goto?guid=4959751085072571973" rel="nofollow,noindex">SR-5292</a> 。修复了 Foundation 里使用 slice 嵌套 slice 时产生的 bug。</p> <p>Joe Groff <a href="/misc/goto?guid=4959751085163221963" rel="nofollow,noindex">通过了一个合并请求</a> ,让 KeyPath 支持可选链(Optional Chainning)和强制解包(Force Unwrapping)。</p> <p>Doug Gregor <a href="/misc/goto?guid=4959751085246147561" rel="nofollow,noindex">通过了一个合并请求</a> ,优化了基本类型,类型别名和递归的处理逻辑,并且修复了 <a href="/misc/goto?guid=4959751085318916577" rel="nofollow,noindex">SR-4295</a> , <a href="/misc/goto?guid=4959751085403865898" rel="nofollow,noindex">SR-4757</a> , <a href="/misc/goto?guid=4959751085477539762" rel="nofollow,noindex">SR-4786</a> , <a href="/misc/goto?guid=4959751085564340910" rel="nofollow,noindex">SR-5014</a> 和 <a href="/misc/goto?guid=4959751085647461800" rel="nofollow,noindex">SR-4737</a> 。</p> <p>Dave Abrahams <a href="/misc/goto?guid=4959751085722264156" rel="nofollow,noindex">发起一个合并请求</a> ,实现了 <a href="/misc/goto?guid=4959751085806934692" rel="nofollow,noindex">SE-0180</a> 字符串索引越界(后面有详细介绍)。</p> <p>在命令行里运行 man swift 时展示的手册 <a href="/misc/goto?guid=4959751085878044807" rel="nofollow,noindex">已获得更新</a> 。</p> <p>Maxim Moiseev <a href="/misc/goto?guid=4959751085961730948" rel="nofollow,noindex">通过了一个合并请求</a> ,修复了 [String] 使用 flatMap 时的向后兼容性,有兴趣了解的话可以查看这里的 <a href="/misc/goto?guid=4959751086038158197" rel="nofollow,noindex">Swift 迷思- by Robert Widmann</a> 。</p> <p>David Farler <a href="/misc/goto?guid=4959751086123752135" rel="nofollow,noindex">通过了一个合并请求</a> ,内容主要是 Xcode 9 里编译时索引功能(index-while-building)在这段时间里的改进。</p> <p>如果你想知道某个修复了 rdar:// 的 PR 的细节, <a href="/misc/goto?guid=4959751086197393841" rel="nofollow,noindex">放心大胆地问就可以了</a> 。</p> <h2>审核中的提案</h2> <p><a href="/misc/goto?guid=4959751085806934692" rel="nofollow,noindex">SE-0180</a> : String Index Overhaul 在一些讨论之后重新退回 <a href="/misc/goto?guid=4959751086291372470" rel="nofollow,noindex">审核阶段</a> 。</p> <h2>邮件列表</h2> <p>Erica Sadun <a href="/misc/goto?guid=4959751086364510261" rel="nofollow,noindex">写了一篇文章</a> 关于 !! 这个她称为“解包或崩溃”的操作符。你可以在 <a href="/misc/goto?guid=4959751086451745602" rel="nofollow,noindex">这个 Gist</a> 里找到相应的草稿。</p> <p>使用一个操作符,在解包失败时提供反馈信息,已经成为 Swift 开发者社区里普遍会实现的一个东西了,你对于把这个广泛使用的操作符加入到标准库有什么想法?</p> <p>译者注:使用了 !! 的代码会类似于这样 let _ = optionalObject !! "空的对象" ,能够在强制解包失败的时候提供 debug 信息,思路很棒,建议大家看一下。</p> <p>Ben Cohen <a href="/misc/goto?guid=4959751086526351413" rel="nofollow,noindex">发了一篇文章</a> ,内容主要是关于 Substring 性能的讨论。</p> <p>作为 <a href="/misc/goto?guid=4959011050214918571" rel="nofollow,noindex">SE-0163</a> 的要点之一, Substring 显式转换到 String 的问题都推迟到第一版实现之后讨论。直到现在,收到的反馈也都没有让我们觉得这样的显式转换很有必要 — 从 3.2 迁移到 4.0 的时候也不怎么需要用到 Substring 到 String 的转换。即便不在开发目标里,只要是这方面的版本迁移问题,收到您的反馈我们都会很感谢。</p> <p>[…]</p> <p>Itai Ferber <a href="/misc/goto?guid=4959751086640363026" rel="nofollow,noindex">在 Swift-Evolution 发了一条信息</a> ,征求 <a href="/misc/goto?guid=4959011050764997017" rel="nofollow,noindex">SE-0166</a> 和 <a href="/misc/goto?guid=4959751086751460815" rel="nofollow,noindex">SE-0167</a> 的反馈,希望社区了解到之前的很多建议已经被采纳并实现,继续提供建议和意见。</p> <p>Robert Bennett 提了一个 <a href="/misc/goto?guid=4959751086830036882" rel="nofollow,noindex">有趣的建议</a> ,希望 protocol 里可以声明 let 。但我并不认为他提的算是一个问题。</p> <p>我在处理协议的时候遇上了一个恼人的问题。在一个 class 或者 struct 里使用 let 去修饰一个属性并且在 init 方法里初始化是很常见的情况,但却没办法在一个 protocol extension 里实现一个这样的 init 方法。</p> <p>[…]</p> <h2>最后</h2> <p>“索取” <a href="/misc/goto?guid=4959751086911973371" rel="nofollow,noindex">有时候</a> 比“给予”感觉更好</p> <p> </p> <p>来自:https://swift.gg/2017/07/26/swift-weekly-issue-76/</p> <p> </p>