Slide 1

Slide 1 text

asmz.beer アプリ開発 - Swift編 2019/07/05 宮城アプリ開発勉強会 #1 Akira Shimizu / asmz

Slide 2

Slide 2 text

asmz.beer 誰なのか? ● Akira Shimizu / asmz (@_asmz) ● https://asmz.beer/ ● 株式会社ビデオマーケット 仙台オフィス ● iOSエンジニア ● 個人開発:IT勉強会検索アプリ ○ https://eventech.asmz.beer/

Slide 3

Slide 3 text

asmz.beer 本日の内容 ● ターゲット ○ 他のプログラミング言語でアプリやWeb開発したことがあるけ ど、Swiftは使ったことがない人 ● 目標 ○ SwiftによるiOSアプリ開発の雰囲気を掴める ○ Xcodeを起動して、試しにちょっとSwift触ってみる ○ Mac買っちゃう

Slide 4

Slide 4 text

asmz.beer アジェンダ 1. Swift概要 2. Swift言語仕様 a. 基本的な構文 b. 特徴的な構文 3. SwiftによるiOSアプリ開発 4. Swiftまとめ、これから

Slide 5

Slide 5 text

asmz.beer 1. Swift概要

Slide 6

Slide 6 text

asmz.beer Swiftとは ● 2014年にApple社が発表したプログラミング言語 ● 各種Apple製品(iPhone, iPad, Apple TV, Apple Watch, Mac)向けアプリケーションの開発が可能 ● 2015年にオープンソース化 ○ Linux上での動作サポート開始

Slide 7

Slide 7 text

asmz.beer Swiftとは ● 過去の開発言語であるObjective-Cと互換 性を保ちながらも、クセの少ない記述方式 を実現 // Objective-C UITableView *myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; // Swift let myTableView = UITableView(frame: .zero, style: .grouped)

Slide 8

Slide 8 text

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化

Slide 9

Slide 9 text

asmz.beer 2. Swift言語仕様  a. 基本的な構文

Slide 10

Slide 10 text

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" // ○ ● 静的型付け ● 型推論 ● 文末セミコロンなし

Slide 11

Slide 11 text

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など一般的な制 御構文が利用可 ● 条件式カッコなし

Slide 12

Slide 12 text

asmz.beer 基本構文 // class class MyClass { func myMethod() { … } } // struct struct MyStruct { let width: Int let height: Int } // protocol protocol MyProtocol { func protocolMethod() } ● クラス ● 構造体(struct) ● インタフェース (protocol)

Slide 13

Slide 13 text

asmz.beer 2. Swift言語仕様  b. 特徴的な構文

Slide 14

Slide 14 text

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値を許容するかどうかコンパイラレベルで区別できる

Slide 15

Slide 15 text

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!) // クラッシュ(ぬるぽ)

Slide 16

Slide 16 text

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)

Slide 17

Slide 17 text

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!

Slide 18

Slide 18 text

asmz.beer 3. SwiftによるiOSアプリ開発

Slide 19

Slide 19 text

asmz.beer iOSアプリ開発環境 ● 統合開発環境「Xcode」を使用 ○ テキストエディタ ○ コード補完 ○ UI設計ツール (Interface Builder) ○ デバッグツール群 ○ シミュレータ ○ テスト実行

Slide 20

Slide 20 text

asmz.beer

Slide 21

Slide 21 text

asmz.beer 主要なFramework ● Foundation ○ 主要なデータ型、コレクションの定義、データ永続化、日付や時 刻の計算、ネットワーキング、Operating System Serviceへの アクセスなど、アプリ動作の基盤となるFramework ● UIKit ○ iOS / tvOSでグラフィカルなイベント駆動型UI機能を提供する Framework

Slide 22

Slide 22 text

asmz.beer UIKit ● UIWindowクラス ○ アプリ全体の画面土台 ● UIViewControllerクラス ○ 画面の表示と各種イベント ・ライフサイクル管理 ● UIView(とそのサブクラス) ○ 画面各部品の表示と管理 UIViewController UIBarButtonItem UIButton UITextField UILabel UITableView UIViewの   サブクラス

Slide 23

Slide 23 text

asmz.beer UIKitを用いたアプリ画面開発 ● Xcodeで画面設計 ○ 実体はXML ● 画面とソースを紐づけ て、ロジックを実装 ViewController

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

asmz.beer SwiftUI ● UIKitに代わる新たなUIフレームワーク ○ Swiftでレイアウト実装が可能になる ○ UIKitはObj-Cベース、SwiftUIはAll Swift ● POINT ○ 宣言的な画面レイアウトコーディング ○ 視覚的なUIデザインツールと統合 ○ リアルタイムプレビュー

Slide 26

Slide 26 text

asmz.beer refs: https://developer.apple.com/tutorials/swiftui/creating-and-combining-views

Slide 27

Slide 27 text

asmz.beer 4. Swiftまとめ、これから

Slide 28

Slide 28 text

asmz.beer まとめ ● Swiftは、記述にクセが少なく学習コストは少ないにも関 わらず、モダンな技術・機能が取り入れられているプロ グラミング言語 ● オープンソース化されてはいるものの、クロスプラット フォーム対応の盛り上がりはあまりなく、現状は「Apple 製品用」プログラミング言語

Slide 29

Slide 29 text

asmz.beer Swiftのこれから ● SwiftUIの発表で、古いObj-Cとの依存関係を減らして、 よりSwiftを進化させようというAppleの意気込みが感じ られた ● 東京のiOS Developer界隈も先日のWWDC絡みの勉 強会が連日開催されている模様 今後もSwiftは「Apple中心」に盛り上がっていくでしょう

Slide 30

Slide 30 text

asmz.beer Enjoy, App Engineering! 2019/07/05 宮城アプリ開発勉強会 #1 Akira Shimizu / asmz

Slide 31

Slide 31 text

asmz.beer [PR] 公式動画配信サービス MIRAIL(ミレール) https://mirail.video/ 映画・ドラマ・アニメなどの映像作品を保有する「コンテンツホルダー」が、直接動 画を販売・配信することができる動画配信プラットフォーム