Overview of Swift and iOS App development

43ce16de3a74c75adc7dfd6194801452?s=47 asmz
July 05, 2019

Overview of Swift and iOS App development

アプリ開発 - Swift編

Talked at 宮城アプリ開発勉強会 #1

43ce16de3a74c75adc7dfd6194801452?s=128

asmz

July 05, 2019
Tweet

Transcript

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

    asmz
  2. asmz.beer 誰なのか? • Akira Shimizu / asmz (@_asmz) • https://asmz.beer/

    • 株式会社ビデオマーケット 仙台オフィス • iOSエンジニア • 個人開発:IT勉強会検索アプリ ◦ https://eventech.asmz.beer/
  3. asmz.beer 本日の内容 • ターゲット ◦ 他のプログラミング言語でアプリやWeb開発したことがあるけ ど、Swiftは使ったことがない人 • 目標 ◦

    SwiftによるiOSアプリ開発の雰囲気を掴める ◦ Xcodeを起動して、試しにちょっとSwift触ってみる ◦ Mac買っちゃう
  4. asmz.beer アジェンダ 1. Swift概要 2. Swift言語仕様 a. 基本的な構文 b. 特徴的な構文

    3. SwiftによるiOSアプリ開発 4. Swiftまとめ、これから
  5. asmz.beer 1. Swift概要

  6. asmz.beer Swiftとは • 2014年にApple社が発表したプログラミング言語 • 各種Apple製品(iPhone, iPad, Apple TV, Apple

    Watch, Mac)向けアプリケーションの開発が可能 • 2015年にオープンソース化 ◦ Linux上での動作サポート開始
  7. asmz.beer Swiftとは • 過去の開発言語であるObjective-Cと互換 性を保ちながらも、クセの少ない記述方式 を実現 // Objective-C UITableView *myTableView

    = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; // Swift let myTableView = UITableView(frame: .zero, style: .grouped)
  8. 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化
  9. asmz.beer 2. Swift言語仕様  a. 基本的な構文

  10. 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" // ◦ • 静的型付け • 型推論 • 文末セミコロンなし
  11. 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など一般的な制 御構文が利用可 • 条件式カッコなし
  12. asmz.beer 基本構文 // class class MyClass { func myMethod() {

    … } } // struct struct MyStruct { let width: Int let height: Int } // protocol protocol MyProtocol { func protocolMethod() } • クラス • 構造体(struct) • インタフェース (protocol)
  13. asmz.beer 2. Swift言語仕様  b. 特徴的な構文

  14. 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値を許容するかどうかコンパイラレベルで区別できる
  15. 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!) // クラッシュ(ぬるぽ)
  16. 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)
  17. 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!
  18. asmz.beer 3. SwiftによるiOSアプリ開発

  19. asmz.beer iOSアプリ開発環境 • 統合開発環境「Xcode」を使用 ◦ テキストエディタ ◦ コード補完 ◦ UI設計ツール

    (Interface Builder) ◦ デバッグツール群 ◦ シミュレータ ◦ テスト実行
  20. asmz.beer

  21. asmz.beer 主要なFramework • Foundation ◦ 主要なデータ型、コレクションの定義、データ永続化、日付や時 刻の計算、ネットワーキング、Operating System Serviceへの アクセスなど、アプリ動作の基盤となるFramework

    • UIKit ◦ iOS / tvOSでグラフィカルなイベント駆動型UI機能を提供する Framework
  22. asmz.beer UIKit • UIWindowクラス ◦ アプリ全体の画面土台 • UIViewControllerクラス ◦ 画面の表示と各種イベント

    ・ライフサイクル管理 • UIView(とそのサブクラス) ◦ 画面各部品の表示と管理 UIViewController UIBarButtonItem UIButton UITextField UILabel UITableView UIViewの   サブクラス
  23. asmz.beer UIKitを用いたアプリ画面開発 • Xcodeで画面設計 ◦ 実体はXML • 画面とソースを紐づけ て、ロジックを実装 ViewController

  24. 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
  25. asmz.beer SwiftUI • UIKitに代わる新たなUIフレームワーク ◦ Swiftでレイアウト実装が可能になる ◦ UIKitはObj-Cベース、SwiftUIはAll Swift •

    POINT ◦ 宣言的な画面レイアウトコーディング ◦ 視覚的なUIデザインツールと統合 ◦ リアルタイムプレビュー
  26. asmz.beer refs: https://developer.apple.com/tutorials/swiftui/creating-and-combining-views

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

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

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

    今後もSwiftは「Apple中心」に盛り上がっていくでしょう
  30. asmz.beer Enjoy, App Engineering! 2019/07/05 宮城アプリ開発勉強会 #1 Akira Shimizu /

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