Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
What’s new in Swift? (from WWDC 2020)
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Kazutaka Homma
July 21, 2020
Programming
1
4.5k
What’s new in Swift? (from WWDC 2020)
This is the slides I used in Reacap of WWDC20 by Mercari
https://mercari.connpass.com/event/180254/
Kazutaka Homma
July 21, 2020
Tweet
Share
Other Decks in Programming
See All in Programming
野球解説AI Agentを開発してみた - 2026/02/27 LayerX社内LT会資料
shinyorke
PRO
0
350
AI時代の脳疲弊と向き合う ~言語学としてのPHP~
sakuraikotone
1
1.3k
Angular-Apps smarter machen mit Gen AI: Lokal und offlinefähig - Hands-on Workshop!
christianliebel
PRO
0
130
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
16
3.3k
CSC307 Lecture 14
javiergs
PRO
0
480
Feature Toggle は捨てやすく使おう
gennei
0
150
PHPのバージョンアップ時にも役立ったAST(2026年版)
matsuo_atsushi
0
190
へんな働き方
yusukebe
5
2.7k
CS教育のDX AIによる育成の効率化
niftycorp
PRO
0
150
Linux Kernelの1文字のミスで 権限昇格ができた話
rqda
0
2k
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
240
nuget-server - あなたが必要だったNuGetサーバー
kekyo
PRO
0
290
Featured
See All Featured
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
61
43k
AI: The stuff that nobody shows you
jnunemaker
PRO
3
460
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
140
Ruling the World: When Life Gets Gamed
codingconduct
0
180
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
420
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
230
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
90
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
390
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Transcript
What’s new in Swift? @Kaz_Homma (Kazutaka Homma)
@Kaz_Homma (本間 和尊) iOS Engineer at Mercari JP Joined on
July, 2019 Github: @Kazutaka333 Twitter: @Kaz_Homma 2
1. Multiple trailing closures 複数クロージャーでもカッコを省略して引数に書ける! 2. Increased availability of implicit
self in closures selfを書く回数が減る! 3. Synthesized Comparable conformance for enum types enumにComparableプロトコルが使いやすくなった! 4. Enum cases as protocol witnesses Enum caseでstatic var・static funcを満たすことができる! 5. KeyPath expressions as function keyPathをクロージャーの代わりに渡せる! Agenda 3
Multiple trailing closures SE-0279 // Trailing Closure なし UIView.animate(withDuration: 0.1,
animations: { self.view.backgroundColor = .red }) // Trailing Closure あり // 引数の省略かつ、ネストを減らしたシンプルな見た目 UIView.animate(withDuration: 0.1) { self.view.backgroundColor = .red } 1/4 4
// Swift5.2 // Trailing Closureなし UIView.animate(withDuration: 0.3, animations: { self.view.alpha
= 0 }, completion: { _ in self.view.removeFromSuperview() }) Multiple trailing closures SE-0279 2/4 // Trailing Closureあり // 引数名が省略されていて2つ目のclosureが // わかりにくい UIView.animate(withDuration: 0.3, animations: { self.view.alpha = 0 }) { _ in self.view.removeFromSuperview() } 5
// Swift5.2 // Multiple Trailing Closureなし // 引数名が省略されいて 2つ目のclosureがわかりにくい UIView.animate(withDuration:
0.3, animations: { view.alpha = 0 }) { _ in view.removeFromSuperview() } Multiple trailing closures SE-0279 3/4 // Swift5.3 // Multiple trailing closureをつかうと… // 少ないネストかつ、2つ目のclosureの引数もあるので // わかりやすい UIView.animate(withDuration: 0.3) { view.alpha = 0 } completion: { _ in view.removeFromSuperview() } 6
// もっとmultiple trailing closures... func animate(animation: (() -> Void), preparation:
(() -> Void), completion: ((Bool) -> Void)) { // hoge hoge... } animate { // animating... } preparation: { // preparing... } completion: { result in // completing task... } Multiple trailing closures SE-0279 4/4 7
// たくさんのself... UIView.animate(withDuration: 0.3) { self.recordingView?.alpha = 0.0 self.textView.alpha =
1.0 } completion: { _ in self.activeTransitionCount -= 1 if !self.isRecording && self.activeTransitionCount == 0 { self.recordingView?.removeFromSuperview() self.recordingView = nil } } Increased availability of implicit self in closures SE-0269 1/4 8
Increased availability of implicit self in closures SE-0269 // Swift5.3ではselfをキャプチャすればclosure内で
// 省略できる UIView.animate(withDuration: 0.3) { [self] in recordingView?.alpha = 0.0 textView.alpha = 1.0 } completion: { [self] _ in activeTransitionCount -= 1 if !isRecording && activeTransitionCount == 0 { recordingView?.removeFromSuperview() recordingView = nil } } // たくさんのself… UIView.animate(withDuration: 0.3) { self.recordingView?.alpha = 0.0 self.textView.alpha = 1.0 } completion: { _ in self.activeTransitionCount -= 1 if !self.isRecording && self.activeTransitionCount == 0 { self.recordingView?.removeFromSuperview() self.recordingView = nil } } 2/4 9
Increased availability of implicit self in closures SE-0269 // weak
selfは今まで通りです UIView.animate(withDuration: 0.3) { [weak self] in guard let self = self else { return } self.recordingView?.alpha = 0.0 self.textView.alpha = 1.0 } UIView.animate(withDuration: 0.3) { [weak self] in self?.recordingView?.alpha = 0.0 self?.textView.alpha = 1.0 } 3/4 10
Increased availability of implicit self in closures SE-0269 4/4 11
Synthesized Comparable conformance for enum types SE-0266 12 1/3 //
まずComparableとは? struct Date { let year: Int let month: Int let day: Int } extension Date: Comparable { static func < (lhs: Date, rhs: Date) -> Bool { if lhs.year != rhs.year { return lhs.year < rhs.year } else if lhs.month != rhs.month { return lhs.month < rhs.month } else { return lhs.day < rhs.day } } } print(Date(year: 10, month: 10, day: 10) > Date(year: 10, month: 10, day: 9)) // true
Synthesized comparable conformance for enum types SE-0266 // Swift 5.3未満
enum Membership: Int, Comparable { case basic case silver case gold static func < (lhs: Self, rhs: Self) -> Bool { return lhs.rawValue < rhs.rawValue } } print(Membership.basic < Membership.silver) // true print(Membership.silver < Membership.gold) // true print(Membership.basic > Membership.gold) // false 13 2/3
Synthesized comparable conformance for enum types SE-0266 // Swift 5.3以前
enum Membership: Int, Comparable { case basic case silver case gold static func < (lhs: Self, rhs: Self) -> Bool { return lhs.rawValue < rhs.rawValue } } print(Membership.basic < Membership.silver) // true print(Membership.silver < Membership.gold) // true print(Membership.basic > Membership.gold) // false 14 3/3 // Swift 5.3では簡略化できる enum Membership: Comparable { case basic case silver case gold } print(Membership.basic < Membership.silver) // true print(Membership.silver < Membership.gold) // true print(Membership.basic > Membership.gold) // false
Enum cases as protocol witnesses SE-0280 15 1/5
Enum cases as protocol witnesses SE-0280 16 2/2
KeyPath expressions as function SE-0249 17 1/4
KeyPath expressions as function SE-0249 18 2/4
KeyPath expressions as function SE-0249 19 3/4
KeyPath expressions as function SE-0249 20 4/4 Swift 5.2からは必要ない
1. Multiple trailing closures 複数クロージャーでもカッコを省略して引数に書ける! 2. Increased availability of implicit
self in closures selfを書く回数が減る! 3. Synthesized Comparable conformance for enum types enumにComparableプロトコルが使いやすくなった! 4. Enum cases as protocol witnesses Enum caseでstatic var・static funcを満たすことができる! 5. KeyPath expressions as function keyPathをクロージャーの代わりに渡せる! おさらい 21
Thank you 22