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
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のSIMDとその利用方法
kntkymt
2
290
Swiftのオーバーロード選択のスコア規則21種類
kntkymt
0
190
Meet high-performance image filtering in Swift
kntkymt
0
160
プログラミングを始めてからiOSエンジニアになるまで
kntkymt
0
1.7k
SwiftUIでの非同期処理データの状態管理を考える
kntkymt
1
2.2k
大学で出席管理アプリ・掲示板閲覧アプリを開発・運用している学生の話
kntkymt
1
2.2k
Other Decks in Programming
See All in Programming
意外と簡単!?フロントエンドでパスキー認証を実現する WebAuthn
teamlab
PRO
2
770
アプリの "かわいい" を支えるアニメーションツールRiveについて
uetyo
0
280
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
610
🔨 小さなビルドシステムを作る
momeemt
4
690
Deep Dive into Kotlin Flow
jmatsu
1
370
「待たせ上手」なスケルトンスクリーン、 そのUXの裏側
teamlab
PRO
0
570
機能追加とリーダー業務の類似性
rinchoku
2
1.3k
Navigating Dependency Injection with Metro
zacsweers
3
2.5k
複雑なドメインに挑む.pdf
yukisakai1225
5
1.2k
Introducing ReActionView: A new ActionView-compatible ERB Engine @ Rails World 2025, Amsterdam
marcoroth
0
710
チームのテスト力を鍛える
goyoki
3
910
Improving my own Ruby thereafter
sisshiki1969
1
160
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Music & Morning Musume
bryan
46
6.8k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
530
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
BBQ
matthewcrist
89
9.8k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
YesSQL, Process and Tooling at Scale
rocio
173
14k
A better future with KSS
kneath
239
17k
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
を知って欲しい