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
Overview of Swift and iOS App development
Search
asmz
July 05, 2019
Technology
0
1.1k
Overview of Swift and iOS App development
アプリ開発 - Swift編
Talked at 宮城アプリ開発勉強会 #1
asmz
July 05, 2019
Tweet
Share
More Decks by asmz
See All by asmz
Getting started with Web front-end development using React Native and Expo
asmz
0
12
Recommend Apple Human Interface Guidelines
asmz
1
2k
How to get mobile app logs using Firebase Crashlytics
asmz
0
790
OK Google, Deploy the iOS app
asmz
1
800
Cooperate with Adobe XD, Zeplin and Xcode
asmz
1
3k
phpconsen LT
asmz
0
680
SWWDC 39
asmz
1
190
Create voice assistant app by Dialogflow
asmz
0
800
SWWDC 34
asmz
0
660
Other Decks in Technology
See All in Technology
30分でわかる「リスクから学ぶKubernetesコンテナセキュリティ」/30min-k8s-container-sec
mochizuki875
3
450
「人物ごとのアルバム」の精度改善の軌跡/Improving accuracy of albums by person
mixi_engineers
PRO
1
120
Copilotの力を実感!3ヶ月間の生成AI研修の試行錯誤&成功事例をご紹介。果たして得たものとは・・?
ktc_shiori
0
360
デザインシステムを始めるために取り組んだこと - TechTrain x ゆめみ ここを意識してほしい!リファクタリング勉強会
kajitack
1
110
AWSマルチアカウント統制環境のすゝめ / 20250115 Mitsutoshi Matsuo
shift_evolve
0
120
RubyでKubernetesプログラミング
sat
PRO
4
160
Formal Development of Operating Systems in Rust
riru
1
420
Amazon Route 53, 待ちに待った TLSAレコードのサポート開始
kenichinakamura
0
180
自社 200 記事を元に整理した読みやすいテックブログを書くための Tips 集
masakihirose
2
340
JuliaTokaiとJuliaLangJaの紹介 for NGK2025S
antimon2
1
130
DMMブックスへのTipKit導入
ttyi2
1
110
[IBM TechXchange Dojo]Watson Discoveryとwatsonx.aiでRAGを実現!座学①
siyuanzh09
0
110
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.6k
GitHub's CSS Performance
jonrohan
1030
460k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
3
240
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Optimising Largest Contentful Paint
csswizardry
33
3k
Agile that works and the tools we love
rasmusluckow
328
21k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
3
180
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
How GitHub (no longer) Works
holman
312
140k
Transcript
asmz.beer アプリ開発 - Swift編 2019/07/05 宮城アプリ開発勉強会 #1 Akira Shimizu /
asmz
asmz.beer 誰なのか? • Akira Shimizu / asmz (@_asmz) • https://asmz.beer/
• 株式会社ビデオマーケット 仙台オフィス • iOSエンジニア • 個人開発:IT勉強会検索アプリ ◦ https://eventech.asmz.beer/
asmz.beer 本日の内容 • ターゲット ◦ 他のプログラミング言語でアプリやWeb開発したことがあるけ ど、Swiftは使ったことがない人 • 目標 ◦
SwiftによるiOSアプリ開発の雰囲気を掴める ◦ Xcodeを起動して、試しにちょっとSwift触ってみる ◦ Mac買っちゃう
asmz.beer アジェンダ 1. Swift概要 2. Swift言語仕様 a. 基本的な構文 b. 特徴的な構文
3. SwiftによるiOSアプリ開発 4. Swiftまとめ、これから
asmz.beer 1. Swift概要
asmz.beer Swiftとは • 2014年にApple社が発表したプログラミング言語 • 各種Apple製品(iPhone, iPad, Apple TV, Apple
Watch, Mac)向けアプリケーションの開発が可能 • 2015年にオープンソース化 ◦ Linux上での動作サポート開始
asmz.beer Swiftとは • 過去の開発言語であるObjective-Cと互換 性を保ちながらも、クセの少ない記述方式 を実現 // Objective-C UITableView *myTableView
= [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; // Swift let myTableView = UITableView(frame: .zero, style: .grouped)
asmz.beer Swiftとは 2014/9/10 Swift 1.0 2015/9/21 Swift 2.0 - 多数の制御文
追加 - エラーハンドリ ング実装 - Protocol extension 2016/9/13 Swift 3.0 - 破壊的な仕様 変更 2017/9/19 Swift 4.0 - Stringや Dictionary型 強化 - Codable登場 1 2 3 4 2019/3/25 Swift 5.0 - ABI安定化 - Result型追加 5 2015/12/3 OSS化
asmz.beer 2. Swift言語仕様 a. 基本的な構文
asmz.beer 基本構文 // 型 let age: Int = 37 let
name: String = "asmz" let isMale: Bool = true let height: Double = 169.5 let pref = "Sendai" // 型推論 // 定数 let taro: String = "taro" let jiro = "jiro" jiro = "saburo" // Error // 変数 var person = "taro" person = "saburo" // ◦ • 静的型付け • 型推論 • 文末セミコロンなし
asmz.beer 基本構文 // if if age > 37 { print("年上!")
} // for-in let ages = [22, 35, 47] for age in ages { print("あなたは\(age)歳です") } // for-in + where let ages = [22, 35, 47] for age in ages where age > 37 { print("\(age)歳の人は年上!") } • if, for-in, switch, whileなど一般的な制 御構文が利用可 • 条件式カッコなし
asmz.beer 基本構文 // class class MyClass { func myMethod() {
… } } // struct struct MyStruct { let width: Int let height: Int } // protocol protocol MyProtocol { func protocolMethod() } • クラス • 構造体(struct) • インタフェース (protocol)
asmz.beer 2. Swift言語仕様 b. 特徴的な構文
asmz.beer Null安全(Optional型) var hoge: String = "abc" // 非Optional(nullを格納できない) var
fuga: String? = "abc" // Optional型(nullを格納できる) print(hoge) // abc print(fuga) // Optional(abc) hoge = nil // Compile Error! fuga = nil // OK • Null値を許容するかどうかコンパイラレベルで区別できる
asmz.beer Null安全 (Optional型) • Optional型の値を 参照する場合は Unwrapする • 強制的にUnwrap するときは注意
var fuga: String? = "abc" print(fuga) // Optional(abc) // if-letでUnwrap if let unwrapFuga = fuga { print(unwrapFuga) // abc } // ↑と同じ挙動になる if fuga != nil { // Force unwrap print(fuga!) // abc } fuga = nil print(fuga!) // クラッシュ(ぬるぽ)
asmz.beer 引数ラベル • 関数・メソッドの引数にラベルがある func logger(level: Level, message: String) {
... } logger(level: .fatal, message: "Fatal error!") // ラベル名と変数名を分けたい場合 func remove(at index: Int) { ... } remove(at: 5) // ラベル省略したい場合 func remove(_ element: Element) { ... } remove(someElement)
asmz.beer 引数ラベル • 英文としてスムーズに読めるように func insert(item: Item, position: Int) {
... } x.insert(item: y, position: z) // "x, insert item y position z" 詳しくはSwift API Design Guidelines(https://swift.org/documentation/api-design-guidelines/)参照 func insert(_ item: Item, at position: Int) { ... } x.insert(y, at: z) // "x, insert y at z" Swifty!
asmz.beer 3. SwiftによるiOSアプリ開発
asmz.beer iOSアプリ開発環境 • 統合開発環境「Xcode」を使用 ◦ テキストエディタ ◦ コード補完 ◦ UI設計ツール
(Interface Builder) ◦ デバッグツール群 ◦ シミュレータ ◦ テスト実行
asmz.beer
asmz.beer 主要なFramework • Foundation ◦ 主要なデータ型、コレクションの定義、データ永続化、日付や時 刻の計算、ネットワーキング、Operating System Serviceへの アクセスなど、アプリ動作の基盤となるFramework
• UIKit ◦ iOS / tvOSでグラフィカルなイベント駆動型UI機能を提供する Framework
asmz.beer UIKit • UIWindowクラス ◦ アプリ全体の画面土台 • UIViewControllerクラス ◦ 画面の表示と各種イベント
・ライフサイクル管理 • UIView(とそのサブクラス) ◦ 画面各部品の表示と管理 UIViewController UIBarButtonItem UIButton UITextField UILabel UITableView UIViewの サブクラス
asmz.beer UIKitを用いたアプリ画面開発 • Xcodeで画面設計 ◦ 実体はXML • 画面とソースを紐づけ て、ロジックを実装 ViewController
asmz.beer UIKitを用いたアプリ画面開発 • Swiftでもレイアウト実装は可能だが、プレビューできない let label = UILabel(frame: .zero) label.text
= "Text from code" label.textColor = .red view.addSubview(label) // 画面サイズに合わせるための自動レイアウトルールを設定 label.translatesAutoresizingMaskIntoConstraints = false label.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true label.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true
asmz.beer SwiftUI • UIKitに代わる新たなUIフレームワーク ◦ Swiftでレイアウト実装が可能になる ◦ UIKitはObj-Cベース、SwiftUIはAll Swift •
POINT ◦ 宣言的な画面レイアウトコーディング ◦ 視覚的なUIデザインツールと統合 ◦ リアルタイムプレビュー
asmz.beer refs: https://developer.apple.com/tutorials/swiftui/creating-and-combining-views
asmz.beer 4. Swiftまとめ、これから
asmz.beer まとめ • Swiftは、記述にクセが少なく学習コストは少ないにも関 わらず、モダンな技術・機能が取り入れられているプロ グラミング言語 • オープンソース化されてはいるものの、クロスプラット フォーム対応の盛り上がりはあまりなく、現状は「Apple 製品用」プログラミング言語
asmz.beer Swiftのこれから • SwiftUIの発表で、古いObj-Cとの依存関係を減らして、 よりSwiftを進化させようというAppleの意気込みが感じ られた • 東京のiOS Developer界隈も先日のWWDC絡みの勉 強会が連日開催されている模様
今後もSwiftは「Apple中心」に盛り上がっていくでしょう
asmz.beer Enjoy, App Engineering! 2019/07/05 宮城アプリ開発勉強会 #1 Akira Shimizu /
asmz
asmz.beer [PR] 公式動画配信サービス MIRAIL(ミレール) https://mirail.video/ 映画・ドラマ・アニメなどの映像作品を保有する「コンテンツホルダー」が、直接動 画を販売・配信することができる動画配信プラットフォーム