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
Swift6からのTyped throws
Search
Toshiyana
July 23, 2024
Technology
1
190
Swift6からのTyped throws
Mobile勉強会 Wantedly × チームラボ × Sansan #15
Toshiyana
July 23, 2024
Tweet
Share
More Decks by Toshiyana
See All by Toshiyana
Mobile 自動E2Eテストの導入検討-Appium
toshiyana36
0
32
Catch Up Swift Concurrency Actor & Sendable
toshiyana36
0
20
Qiita Hackathon: そこにAIはあるんか
toshiyana36
0
48
新卒iOSエンジニアの歩み
toshiyana36
0
380
Swiftで簡易 HTTP Server を作る
toshiyana36
0
220
Other Decks in Technology
See All in Technology
FastConnect の冗長性
ocise
0
7.2k
Envoy External AuthZとgRPC Extensionを利用した「頑張らない」Microservices認証認可基盤
andoshin11
0
210
標準ライブラリの奥深アップデートを掘り下げよう!
logica0419
2
430
目標設定と習慣化で今よりも一歩生産性を上げる
sansantech
PRO
7
2.4k
OR学会2024秋_短期収益と将来のオフ方策評価性能を考慮したクーポン割当方策混合比の決定
recruitengineers
PRO
3
240
四国クラウドお遍路 2024 in 高知 オープニング
yukataoka
0
160
Swift Testingのconfirmationを コードリーディング/Dive into Swift Testing confirmation
laprasdrum
1
140
The XZ Backdoor Story
fr0gger
0
2.6k
Dojo 20240830 COBOL to Java on Z
ichikawayasuhisa
0
250
スーパーマリオRPGのリメイク版の変更点からみるUX
nishiharatsubasa
1
300
Javaにおける関数型プログラミンへの取り組み
skrb
7
290
MySQLのあらたしいリリースモデル LTSとIR
sakaik
1
140
Featured
See All Featured
A Philosophy of Restraint
colly
202
16k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
29
2.6k
What the flash - Photography Introduction
edds
67
11k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
27
7.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
52k
Raft: Consensus for Rubyists
vanstee
135
6.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
45
4.8k
For a Future-Friendly Web
brad_frost
174
9.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.9k
Embracing the Ebb and Flow
colly
83
4.4k
Why You Should Never Use an ORM
jnunemaker
PRO
53
8.9k
Done Done
chrislema
180
16k
Transcript
Swift6からのTyped throws Toshiyana Mobile勉強会 Wantedly × チームラボ × Sansan #15
⾃⼰紹介 Toshiyana X: @toshi_ios_jp • 所属: 合同会社 DMM.com DMM PointClub
iOSチーム • 趣味: テニス🎾、⼀⾵堂 • 最近、Vision Proを初めて体験。視線認識技術すご。 2
• Typed throwsとは? • モチベーション • 既存のthrowsによるエラーハンドリング • Typed throwsによるエラーハンドリング
• メリット • 利⽤場⾯ 話すこと 3
• 機能概要: 特定の型のエラーのみをスローする機能 ◦ 対象: 関数、イニシャライザ、do-catch⽂ • Swift6で導⼊される機能 Typed throwsとは?
https://github.com/swiftlang/swift-evolution/blob/main/proposals/0413-typed-throws.md 4
• throwsはResultやTaskと異なり具体的なエラー情報を持てない • throwsはResultやTaskと相互変換できない • 存在型の any Errorは、型が不明なのでオーバーヘッドが発⽣ ◦ メモリ、実⾏パフォーマンスで発⽣
Typed throwsのモチベーション これらを解決したい 5
• throwsをつけた場合にエラーはany Error型として扱われる 既存のthrowsによるエラーハンドリング 6
• 呼び出し側は何のエラーを投げられるか不明 既存のthrowsによるエラーハンドリング 7
• throwsで具体的なエラータイプを指定可能 Typed throwsによるエラーハンドリング 8
• throwsで具体的なエラータイプを指定可能 Typed throwsによるエラーハンドリング 9
• init() throwsでタイプ指定可能 イニシャライザもTyped throwsが可能 10
• 可読性の向上 ◦ 投げられるエラータイプの明確化 ◦ throwする際のエラータイプの省略 • 型安全性の向上 ◦ 指定外のエラーを処理しようとするとコンパイル時に検出
• パフォーマンス向上 ◦ 組み込みなどリソース制限のある環境では重要 Typed throwsを利⽤するメリット 11
1. モジュールやパッケージで閉じてエラーを処理する場合 ◦ エラー型を閉じ込めることで、内部変更が外部に影響しない 2. ジェネリックなコードで⾃⾝はエラーを発⽣させず、利⽤者側か らエラーを発⽣させる場合 3. 制約のある環境 (組み込み)
でメモリ割り当てができず、⾃⾝のエ ラーのみ発⽣させる場合 Typed throwsの利⽤場⾯ 12
• Swift6で導⼊されるTyped throwsを学んだ • Typed throwsは利点もあるが利⽤場⾯を意識する • 可読性や型安全性は向上するので、使えそうな箇所で導⼊していきた い まとめ
13
• https://github.com/swiftlang/swift-evolution/blob/main/proposals/0413-typed-throws.md • https://medium.com/@vereshhagin98/typed-throws-in-swift-6-76c5ff657a81 • https://www.avanderlee.com/swift/typed-throws/ 参考 14