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
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
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
560
AI 開発合宿を通して得た学び
niftycorp
PRO
0
130
20260315 AWSなんもわからん🥲
chiilog
2
160
ふつうのRubyist、ちいさなデバイス、大きな一年 / Ordinary Rubyists, Tiny Devices, Big Year
chobishiba
1
460
go directiveを最新にしすぎないで欲しい話──あるいは、Go 1.26からgo mod initで作られるgo directiveの値が変わる話 / Go 1.26 リリースパーティ
arthur1
2
560
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.6k
ロボットのための工場に灯りは要らない
watany
10
2.9k
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
150
AI Assistants for Your Angular Solutions
manfredsteyer
PRO
0
140
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
600
Windows on Ryzen and I
seosoft
0
300
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
1
210
Featured
See All Featured
The untapped power of vector embeddings
frankvandijk
2
1.6k
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
The Language of Interfaces
destraynor
162
26k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
86
A better future with KSS
kneath
240
18k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
320
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
380
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
170
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
160
Exploring anti-patterns in Rails
aemeredith
2
290
Navigating Team Friction
lara
192
16k
BBQ
matthewcrist
89
10k
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