回顾 Try!Swift Tokyo 2018

拖延症很可怕,过了快两周终于开始着手写 Try!Swift Tokyo 2018 的感想。受到了前同事的影响,今年的大会我是做为志愿者参加的,玩得很开心,然而只听到了一半的演讲T.T。所以之后会从听众和志愿者两个角度来简短的写一写让我印象深刻的一些事儿。

集合写真

Try!Swift 官网

久闻不如一见,各种机缘巧合终于和喵神碰面了,一路学习 iOS 可能读的最多的就是喵神写的文章了,真的是受益匪浅。虽然因为比较忙只聊了一会儿还都是杂谈www,但是有种成就达成的激动感(`・∀・)

第一天早晨还遇到了 Smooz 的创始人 Kato 桑,人很和善且健谈,回忆起第一次知道 Smooz 是 16 年的年初,那时候还在测试阶段,只有 iOS 版本,也还没有成立公司运营,类似于独立开发者项目。Smooz 拥有类似 web 浏览器的多 tab 置顶让人眼前一亮,各种手势的便利性也增色不少,另外颜色还相当可爱。当时 (很失礼地) 暗自想会不会渐渐又成为一个换肤浏览器?事实胜于一切,后来 Smooz 获得了 App Store Best of 2016,现在常常可以在电车上看到用户,总之是一款很不一样的移动端浏览器,值得一试。

听众视角

缺席了几场想听的演讲,像是 Charlse for iOS..泪目。下面所写的大多是临场感受。

这是一份日语的资料总结

代码优化:Optimizing Swift code for separation of concerns and simplicity

代码的优化是一个老生常谈的话题,不过有些东西越老越能凸显它的价值所在。我个人对这个话题比较感兴趣,一方面是如讲者所说:代码通常读比写更多;还有一个原因就是团队合作,简洁明确再重要不过了。听完这个“最佳编程实践”之后,我觉得对于我这样段位不高的开发者来说还是颇有收获的,也许今后能把代码写的更 Swifty 一些?。另外,扩展给 Swift 带来的便利在这些例子中也是体现的淋漓尽致。

很多例子都深有同感,比如说下面这种模型:

// before
api.requestReplies(postID: 4815162342) { [weak self] result in
   switch result {
   case .success(let replies):
     var filteredReplies: [Reply] = []
     for reply in replies {
       if !user.isBlocking(reply.author) {
         filteredReplies.append(reply)
       }
     }

     self?.replies = filteredReplies
   case .failure:
       // ...
   }
}

作为一个写 Objective-C 多于 Swift 的人,私以为这样的写法在大家的 Objc 代码中可是说是十分常见了~即使能优化,感觉也只能加入一个 filter 写成下面这样?

NSArray *filteredArray = [replies filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(Reply *reply, NSDictionary *bindings) {
    return [user isBlocking:reply.author];
}]];

讲者提到的 Swift 优化方案是:1. 将核心逻辑抽象出来作为一个 Collection 的扩展;2. 活用 varfilter。这样一来,代码的“信噪比”会得到不少提升,写法也比较优雅:

// After
extension Collection where Element == Reply {
  var filteringBlockedContent: [Reply] {
    return filter { !user.isBlocking($0.author) }
  }
}

api.requestReplies(postID: 4815162342) { [weak self] result in
   switch result {
   case .success(let replies):
     self?.replies = replies.filteringBlockedContent
   case .failure:
       // ...
   }
}

真心希望以后写的代码都是 "After"。

更多例子在这里

SwiftNIO

还在演讲前大家一起聊天时就推测这可能是当日最火?毕竟能在 WWDC 以外和 Apple 工程师交流的机会少之又少,因此还为 Q&A 环节增派了志愿者~而发表的内容也没有让人失望,,在介绍了一些有关异步,以及 IO 事件的发生其实可能并没有我们想的那么频繁之后,表示不如打造一个 Swift 版的 Netty 来让性能得到一个飞跃吧,于是 SwiftNIO 就诞生了。后来的内容陷入了一种云里雾里,还是暂且先跳过吧😂。在意料之外的是最后直接宣布了 SwiftNIO 的开源。随着它的开源,服务器端 Swift 算是又迈出了重要一步。

最近有人担心 Norman 会不会因为 SwiftNIO 的开源而导致维护 Netty 的时间变少,他表示不用担心噢大家,我已经同时维护它们超过一年了~

前两天视频已经公开了:Youtube Link

用 Swift 进行游戏开发👾

演讲者 giginet 去年是 Lightning Talk,发表了用 SprireKit 在 AppleWatch 上开发超级玛丽的种种,并在此后的 Hackthon 中开发了一个 Touch Bar 小游戏,花样挖掘苹果家设备的潜能,很会玩。

今年再次卷土重来,上来就表示其实 Xcode 是一个游戏开发工具,并展示了在 Xcode 里绘制的世界地图…言归正传,开始着重介绍了一下 SprireKit 和 GameplayKit 的基本用法和示例。最后再把 SprireKit 与 Unity 进行了一波比较,几乎在所有平台全军覆没的 SprireKit 在 WatchOS 独占了一块阵地。。所以 Swift 开发者们都行动起来吧!

虽然开了很多玩笑,不过如果想着手游戏开发,也许还真可以用 Swift 一试呢?

资料: https://speakerdeck.com/giginet/-11

算法可视化:Using Swift to Visualize Algorithms

没有听到演讲前以为会是一个借算法可视化来介绍 Swift 在图形绘制上的优势之类的。比较意外真正的核心主题是贝塞尔曲线。这个演讲在现场得到了相当好的反响,大概凭借的是讲解比较清晰易懂,像是给定任意点如何绘制,多阶贝塞尔曲线如何绘制都能从中找到答案。如果对动画有兴趣但不了解贝塞尔曲线的绘制方法不妨看一看~

资料: https://speakerdeck.com/subdigital/bezier-curves

Open Source Swift Workshop

最后一天有几场 workshop,我只去了 Open Source Swift Workshop (By Nicholas Maccharoli & ikesyo)。大概可以概括为 “如何通过改 bug 或优化为 Swift 贡献力量”。应该有很多人都想过,除了用 Swift 写代码,我们是不是能做的更多呢。现实的残酷在于,实际上手有时候并不是那么容易,也许是需要一个契机,也许是需要一个人引导。而这个 workshop 便成为了一个很好的机会,结束后有不止一个人提了 pr...

鉴于自身学识浅薄,当天向 ikesyo 桑请教了最初该如何着手,作为入门我觉得很细致很清晰:

  1. build 最新的 Swift 源码。
  2. https://bugs.swift.org :在这里会有很多待解决的 issue, 属于 Compiler, LLDB for Swift, Package Manager, Standard Library 等模块,第一次上手选择自己相对了解的会比较好,例如:Standard Library 和 Foundation。正确使用 Filter 也有助于找到适合自己的 issue,比如说检索带有入门级标签的 Standard Library 或 Foundation issue: labels = StarterBug AND status = Open AND component in ("Standard Library", Foundation)
  3. https://forums.swift.org :在这里和大家愉快的讨论问题。
  4. 也可以通过从源码中查找 FIXME, TODO 这些关键字来查找可以改进的地方,这其中甚至有一些是文本层面的修正~

扩展阅读:

  • https://swift.org/compiler-stdlib/#compiler-architecture
  • https://swift.org/community/
  • https://academy.realm.io/posts/tryswift-jesse-squires-contributing-open-source-swift/
  • https://www.uraimo.com/2016/02/09/a-short-swift-gyb-tutorial/
  • https://www.youtube.com/watch?v=e18uipMmEoo

志愿者视角

今年的参会人数包括 Sponsor 和 Speaker 达到了 800 人,来自日本以外的参加者也超过了 200 人,志愿者的数量约为 30 人。阴差阳错,我主要担当的是 global support,引导演讲者与同传事前会面,按时上台,之后 Q&A。很有意思的一个细节是,英语同声译日语其实很痛苦,因为日语真的很啰嗦,尤其是这种场合基本都是敬语,英语 10 个音节日语可能需要 20 个,每次同传们都会千叮咛万嘱咐演讲者慢一点再慢一点😂,事后再吐槽“你怎么越讲越快呢~~”。很大的收获是意识到了自己的语言是有多么差。。。

这次有一个很特殊的志愿者,80 多岁了仍然在学习写代码,有自己的主页及上架应用,听说之后觉得唯有敬佩,没能直接交流真是太遗憾了。有时候休会时间会看到一些人盒饭放一边,坐在走廊和墙边就噼里啪啦写代码,由衷的觉得:能如此热爱一件事真是太好了!

日本很多 iOS 活跃的企业都作为 Sponsor 有自己的展区,(主要还是为了招聘,到处看被塞了好几份介绍)。像是 Yahoo Japan 的 live coding 得到了很好的反响。于企业于个人这都是一个不错的机会。

P.S. Party 的蛋糕真的是太可爱了...

Cake

写在最后

于我而言,大概就是意识到了自己在很多方面都还差很远的事实,不管是技术还是日语英语。前路漫漫,继续加油。明年再见。