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
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
Recommend Apple Human Interface Guidelines
asmz
1
1.7k
How to get mobile app logs using Firebase Crashlytics
asmz
0
710
OK Google, Deploy the iOS app
asmz
1
700
Cooperate with Adobe XD, Zeplin and Xcode
asmz
1
2.8k
phpconsen LT
asmz
0
610
SWWDC 39
asmz
1
130
Create voice assistant app by Dialogflow
asmz
0
750
SWWDC 34
asmz
0
600
SWWDC 30
asmz
1
2.4k
Other Decks in Technology
See All in Technology
What if...? 처음부터 다시 LLM 어플리케이션을 개발한다면
huffon
0
1k
VPoEの視点から見た、ヘンリーがサーバーサイドKotlinを使う理由 / Why Server-side Kotlin 2024
cho0o0
1
420
RAGのサービスをリリースして1年3ヶ月が経ちました
segavvy
4
960
Amazon FSx for NetApp ONTAPのパフォーマンスチューニング要素をまとめてみた #cm_odyssey #devio2024
non97
0
220
DevIO2024_レガシー運用からの脱却 -クラウド活用の実践事例とベストプラクティス-
jun2882
0
210
プレイドにおけるDatadog APMの活用方法
plaidtech
PRO
2
120
JBUG岡山 #6 WordCamp男木島の チームビルディング
takeshifurusato
0
150
シフトレフトで挑む セキュリティの生産性向上
sekido
PRO
0
270
地理情報とAPIのトレンド
nagix
0
160
ソフトウェアエンジニアリングの知見を活かして データ基盤をいい感じにする on Snowflake [MIERUNE BBQ #10]
mtpooh
2
150
CEL(Common Expression Language)で書いた条件にマッチしたIAM Policyを見つける / iam-policy-finder
fujiwara3
0
720
累計ダウンロード数1億8000万を超えるアプリケーションプラットフォームのレガシーシステム脱却とモダン化への道
kmitsuhashi
0
120
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
12
3.8k
How GitHub (no longer) Works
holman
305
140k
Building Your Own Lightsaber
phodgson
101
5.9k
Teambox: Starting and Learning
jrom
130
8.6k
Adopting Sorbet at Scale
ufuk
71
8.8k
Writing Fast Ruby
sferik
623
60k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
149
45k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Fashionably flexible responsive web design (full day workshop)
malarkey
399
65k
Rails Girls Zürich Keynote
gr2m
93
13k
The Cult of Friendly URLs
andyhume
75
5.9k
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/ 映画・ドラマ・アニメなどの映像作品を保有する「コンテンツホルダー」が、直接動 画を販売・配信することができる動画配信プラットフォーム