Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Swiftを知って欲しい
Search
kntk
March 21, 2020
Programming
1
130
Swiftを知って欲しい
kntk
March 21, 2020
Tweet
Share
More Decks by kntk
See All by kntk
"奇妙"なSwift
kntkymt
3
250
SwiftのSIMDとその利用方法
kntkymt
2
300
Swiftのオーバーロード選択のスコア規則21種類
kntkymt
0
190
Meet high-performance image filtering in Swift
kntkymt
0
170
プログラミングを始めてからiOSエンジニアになるまで
kntkymt
0
1.8k
SwiftUIでの非同期処理データの状態管理を考える
kntkymt
1
2.3k
大学で出席管理アプリ・掲示板閲覧アプリを開発・運用している学生の話
kntkymt
1
2.3k
Other Decks in Programming
See All in Programming
堅牢なフロントエンドテスト基盤を構築するために行った取り組み
shogo4131
3
1.3k
Herb to ReActionView: A New Foundation for the View Layer @ San Francisco Ruby Conference 2025
marcoroth
0
230
ZOZOにおけるAI活用の現在 ~モバイルアプリ開発でのAI活用状況と事例~
zozotech
PRO
7
3.3k
Level up your Gemini CLI - D&D Style!
palladius
1
150
ViewファーストなRailsアプリ開発のたのしさ
sugiwe
0
260
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
6
2.8k
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
130
「文字列→日付」の落とし穴 〜Ruby Date.parseの意外な挙動〜
sg4k0
0
330
TVerのWeb内製化 - 開発スピードと品質を両立させるまでの道のり
techtver
PRO
3
1.3k
ID管理機能開発の裏側 高速にSaaS連携を実現したチームのAI活用編
atzzcokek
0
140
配送計画の均等化機能を提供する取り組みについて(⽩⾦鉱業 Meetup Vol.21@六本⽊(数理最適化編))
izu_nori
0
110
無秩序からの脱却 / Emergence from chaos
nrslib
2
11k
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
A Tale of Four Properties
chriscoyier
162
23k
Designing for humans not robots
tammielis
254
26k
How to Think Like a Performance Engineer
csswizardry
28
2.3k
Writing Fast Ruby
sferik
630
62k
BBQ
matthewcrist
89
9.9k
What's in a price? How to price your products and services
michaelherold
246
12k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.1k
Speed Design
sergeychernyshev
33
1.3k
RailsConf 2023
tenderlove
30
1.3k
Transcript
Swiftを知って欲しい @kntk Swift を知って欲しい
$ ./intro/aMonthAgo 1ヶ月前 (勢いで)開発勉強会で発表しようと 思った Swift を知って欲しい
$ ./intro/aWeekAgo 1週間前 発表内容が思いつかないがまだ焦る時期 じゃない Swift を知って欲しい
$ ./intro/yabai 先週末 発表できることない... Swift を知って欲しい
$ ./intro/theme プログラミング学びたてだからこそ できる発表があるのかも...? Swift を知って欲しい
$ ./intro/theme2 Swiftの基本的(だけど重要)な内容を 紹介したらどうだろう Swift を知って欲しい
$ cat ./intro/slide_theme Swiftを知って欲しい Swift を知って欲しい
$ cat ./intro/aim 達成目標(?) Swift を知らない方に、Swift を知ってもらう Swift を知っている方に、初学者目線の Swift
を知ってもらう Swift を知って欲しい
$ ./main それでは本題 Swift を知って欲しい
$ ./before の前に... Swift を知って欲しい
$ cat ./disclaimer 利用規約・免責事項 第 1 条 (適用) 本規約はこのスライド及び発表を見た全ての方と 私・kntk(以下、当方とします)
との間のスライド 及び発表に関わる一切の関係に適用されるものと します。 第 2 条 (免責事項) このスライド及び、発表の際に当方が発言した内 容は全て個人的な見解であり、正しい情報である とは限りません。 また、このスライドに記載されている内容を参 考・引用したことによって生じた損失は一切責任 Swift を知って欲しい
$ cat ./overview Swift Apple が開発したモダンな言語 主に Apple 社製品のアプリケーション開発に 使われる
C 系統最新言語 (?) Swift を知って欲しい
$ ./variables Swift let pi = 3.14 // 定 数
var money = 5000 // 変 数 Swift を知って欲しい
$ ./variables Swift let pi = 3.14 // 定 数
var money = 5000 // 変 数 JavaScript const pi = 3.14; // 定 数 let money = 5000; // 変 数 Swift を知って欲しい
$ ./suddenly 突然ですが Swift を知って欲しい
$ ./question 問題です Swift を知って欲しい
$ echo ”Can you read the next program?” 次のプログラムの出力は どうなるでしょう?
Swift を知って欲しい
$ cat ./question_variable.swift Swift var numbers = [1, 2, 3]
var copy = numbers // コ ピ ー 元 に 要 素 を 追 加 numbers.append(4) print("numbers: \(numbers)") print("copy: \(copy)") Swift を知って欲しい
$ cat ./question_variable.js JavaScript let numbers = [1, 2, 3];
let copy = numbers; // コ ピ ー 元 に 要 素 を 追 加 numbers.push(4); console.log(`numbers: ${numbers}`); console.log(`copy: ${copy}`); Swift を知って欲しい
$ ./choice_question_variable 1 numbers だけ変わる numbers: [1, 2, 3, 4]
copy: [1, 2, 3] 2 両方変わる numbers: [1, 2, 3, 4] copy: [1, 2, 3, 4] Swift を知って欲しい
$ ./answer_question_variable JavaScript: 2 両方変わる Swift を知って欲しい
$ ./answer_question_variable Swift: 1 numbersだけ変わる Swift を知って欲しい
$ ./why? Swiftのコレクションは値型 Swift を知って欲しい
$ ./why? Swiftのコレクションは値型 参照型のclassと値型のstructが 存在 Swift を知って欲しい
$ ./in_addition ちなみに... Copy-On-Writeと言う仕組みで 「値が最初に変更される直前」にコピー var numbers = [1, 2,
3] var copy = numbers print(&numbers == ©) // true numbers.append(4) print(&numbers == ©) // false ※本当は&numbers ではなく UnsafePointer(numbers) Swift を知って欲しい
$ ./in_addition_addition ちなみにちなみに... Int, Double, Bool, Stringなどはもちろん 多くの標準ライブラリが値型 Swift を知って欲しい
$ ./in_addition_addition ちなみにちなみに... Int, Double, Bool, Stringなどはもちろん 多くの標準ライブラリが値型 UIKitは参照型だけど... SwiftUIではList,
Text, Buttonなど ほとんどのコンポーネントが値型 Swift を知って欲しい
$ man struct 全部が全部値型で記述すればOK!! と言うわけではなく... 使い分けは必要! 参照型/値型のどちらでも良い時は値型で書くことが多い (?) Swift を知って欲しい
$ cat ./overview Swift Apple が開発したモダンな言語 主に Apple 社製品のアプリケーション開発に 使われる
C 系統最新言語 (?) 値型中心の言語 Swift を知って欲しい
$ cat ./reference Heart of Swift https://heart-of-swift.github.io/ Swift での Copy
on Write の実装方法の解説 https://qiita.com/omochimetaru/items/ f32d81eaa4e9750293cd Swift の実行コード (paiza.io) https://paiza.io/projects/ 6BqzTRcZuDkmnMvbFU0_LA JavaScript の実行コード (paiza.io) https://paiza.io/projects/ RTuufgFaCDV9pMQhrKO7Vg Swift を知って欲しい
$ ./next 次のテーマ Swift を知って欲しい
$ ./suddenly2 突然ですが Swift を知って欲しい
$ ./question2 質問です Swift を知って欲しい
$ echo ”Do you know ’checkException’?” 「検査例外」って知ってますか? Swift を知って欲しい
$ ./evil_language_java? †魔の言語Java† にも有ったアレ? Swift を知って欲しい
$ man checkException // エ ラ ー が 起 き
な い 関 数 func safetyProcess() // エ ラ ー が 起 き る 可 能 性 の あ る 関 数 func unsafetyProcess() throws Swift を知って欲しい
$ man checkException throws が着いた関数内でしか例外を投げれない func safetyProcess() { // コ
ン パ イ ル エ ラ ー throw SafetyDakedoError() } func unsafetyProcess() throws { let data = ... if data.isEmpty { // 関 数 に throws が 着 い て い る の で OK throw DataIsEmptyError() } } Swift を知って欲しい
$ man checkException throws が着いた関数は「throws が着いた関数内」 または「do-catch 文の中」でしか呼び出せない func safetyProcess()
{ // コ ン パ イ ル エ ラ ー unsafetyProcess() do { try unsafetyProcess() } catch { print(error) } } func unsafetyProcess() throws { try unsafetySomething() } Swift を知って欲しい
$ man checkException throws が着いた関数は呼び出す際に try を付けな ければいけない func safetyProcess()
{ do { // コ ン パ イ ル エ ラ ー unsafetySomething() // OK try unsafetyProcess() } catch { print(error) } } Swift を知って欲しい
$ cat ./checkexception_conclusion 検査例外のルール throws が着いた関数内でしか例外を投げれない throws が着いた関数は「throws が着いた関数内」また は「do-catch
文の中」でしか呼び出せない throws が着いた関数は呼び出す際に try を付けなけれ ばいけない Swift を知って欲しい
$ ./what_is_good 何が良いの? Swift を知って欲しい
$ ./pro1 throws が着いた関数は 「throws が着いた関数内」または 「do-catch 文の中」でしか呼び出せない 例外処理を強制することができる =例外処理をし忘れてクラッシュすることがない
func safetyProcess() { do { try unsafetyProcess() } catch { print(error) } } Swift を知って欲しい
$ ./pro2 throws が着いた関数は呼び出す際に try を付 けなければいけない 例外が発生する箇所がわかりやすい func safetyProcess()
{ do { try unsafetyProcess() safetySomething() try unsafetySomething() } catch { print(error) } } Swift を知って欲しい
$ ./con? 関数側では throw するしかないけど 無視したい/ちゃんとやれば起こるはずのない例 外もあるじゃん それを毎回... func safetyProcess()
{ do { try almostSafetyProcess() } catch { print(error) } } Swift を知って欲しい
$ ./pro3 try!, try?演算子を使うことで無視が可能 do-catch 文, throws が不要になる func safetyProcess()
{ // throw さ れ た 場 合 は ア プ リ が 落 ち る try! almostSafetyProcess() // throw さ れ た 場 合 は nil(null) が 帰 る try? almostSafetyProcess() } Swift を知って欲しい
$ ./pro 検査例外のメリット 例外処理を強制することができる 例外が発生する箇所がわかりやすい ハンドリングの必要がない箇所は簡単に無視 ができる Swift を知って欲しい
$ ./in_addition2 さらに... SwiftにはOptional(null安全)の機構 が備わっている Swift を知って欲しい
$ ./thus 検査例外+Optionalによって エラーハンドリングが容易 クラッシュすることがまず無い! Swift を知って欲しい
$ ./thus 検査例外+Optionalによって エラーハンドリングが容易 クラッシュすることがまず無い! 「!を付けなければ基本落ちないから大丈夫」 try! hoge! Swift を知って欲しい
$ cat ./overview Swift Apple が開発したモダンな言語 主に Apple 社製品のアプリケーション開発に 使われる
C 系統最新言語 (?) 値型中心の言語 エラーハンドリングがしやすい Swift を知って欲しい
$ cat ./reference Swift のエラーハンドリングはなぜ最先端な のか https://qiita.com/omochimetaru/items/ c30f7a021fb9b8f0fa92 Swift はどのように
Java の検査例外を改善し たか https://qiita.com/koher/items/ e4c1d88981291c35d571 Swift を知って欲しい
$ cat ./overview Swiftを知っていただけたでしょうか? Swift Apple が開発したモダンな言語 主に Apple 社製品のアプリケーション開発に
使われる C 系統最新言語 (?) 値型中心の言語 エラーハンドリングがしやすい Swift を知って欲しい
$ ./p.s. このスライドは LaTeX で Beamer と言うスライド 作成用ドキュメントを使って作っています Swift を知って欲しい
$ ./p.p.s. C0de では新入生向けに† Java †を 1 から教える 授業を開催しています! Swift
を知って欲しい