めも帖

「めも帖」代わりにダラダラと書いていったり、めもしたりしているだけです。

池袋で【Swift】iOS・iPhone勉強会「4年前のカメラアプリをSwiftで書きなおした」に行ってきた

自己紹介、会社紹介

  • 株式会社トルクス 代表取締役 山田 宏道
  • B2Bが多い
  • Tech Garden School で教えている
    • schoo で話したりした

FrameCamera 2.1

  • カメラ上にフレームをスワイプで切り替えて撮影できる
  • 2009年にiPhone3GSを手に入れて、2009年末に開発
  • 2010年3月にリリース
  • Twitter投稿対応
  • 2010年9月にiOS4対応
    • iPhone4には未対応
    • こないだまでAppStoreでも配信されているぐらいに、動いていた
  • 気づいたら4年放置...
  • ARCもないので、メモリ管理は自分で。AVFoundation?Storyboard?CollectionView?

2014年夏

  • 6月にSwiftが登場
  • 勉強をかねてバージョンアップ
  • 2014年9月スタート
    • 実質2人日ぐらいで動いた
    • 6人日弱で申請
    • 新機能?に助けられた

開発方針

  • 機能はそのまま
  • iOS7対応
  • StoryBoardを採用
  • カメラの上にフレームを表示する
    • これまで
    • AVFoundation + CollectionView

結論!

ヘッダーファイルがない!

  • プロジェクトがスッキリ
  • 教えやすい
  • C / C++ になれていると違和感
  • ソースの見通しが悪くならないように気をつけるようになる
    • Xcode の機能をきちんと使わないといけない

クラス宣言は直感的

  • 他言語にありがちなので、すぐ理解できた

enumは結構違う

  • NS_ENUMとは使い勝手が違う
  • 値とイコールではない
    • toRaw()、fromRaw()
  • Obj-C -> Swiftの自動変換が素晴らしい
    • 知らなかった...
    • 逆はない

Obj-Cとの連携は簡単

  • SwiftのプロジェクトにObj-Cのコードやライブラリを追加するのは簡単
  • ProjectName-Bridding-Header.h を作成しプロジェクトに追加する

Optionlどうなの?

  • Swift最大の問題児
  • Swift
    • 変数にnilを入れられない
    • 型が違うと自動で変換してくれない

Optionl:1

var ngName: String  = nil // NG!
var ngName: String? = nil // OK!
var ngName: Opitonal<String> = nil // OK!

Optional:2

var myName:String? = "test" var upper = myName.uppercaseString // NG!

OptionalをUnwrapする

var upper = myName?.uppercaseString // OK!

Optional:3

if(myName != nil){
  var upper = myName!.uppercaseString
}
var upper = myName?.uppercaseString

Optional:4

Optionl宣言面倒!への対応

var myName: String! = "test"
var lower = myName.lowercaseString

Implicitly Unwrapped Optional

Optional:まとめ

  • 面倒だけれど、高速化、実行時の安全と思って対応
  • ソースの段階で、nilをチェックしてくれる役目
    • Xcodeが教えてくれる

DelegateはProtocol

無理にStringを使わない

  • 慣れている方を使った方がいい
    • Dictionaryだと型が決まってしまう
    • NSDictionay、NSArrayをそのまま使う方が便利

単語や演算子間のスペースが超重要

  • = の前後にスペースをあけないとエラーになった(Xcode 6.0.1あたり)

Xcodeは旧バージョンを残す

  • Xcodeの名前を書き換えて旧バージョンを残す
  • Swiftのバージョンがあがるとビルドが出来ないことがある

アップできなかった

  • Xcode 6.1でビルドして申請しようとしたらアップ出来なかった
  • 例) Xcode6.1が怖い利理由
  • Xcodeが変わるとSwiftが変わる

スクリーンショット準備が大変

  • 画面サイズが増えた
  • 多言語になると、もっと増える

おすすめ検索方法

  • Googleの検索時に、期間指定をするといい

質疑応答

参考にした書籍、ドキュメントは?

  • 9月なのでAppleの情報
  • 問題は、Swiftのバージョンがあがると、動かない
  • iBooksは、どんどん更新されるので、助かった
  • WWDCの情報も古くなっていく

Optionalの「?」「!」は、なんて呼ぶ?

  • ググりづらい
  • wrapの..、unwrapの...と心の中で呼んでいる
  • 記号が意味を持つのは好きじゃない

学習コストは?

  • Swiftは書きやすい。他の言語をしている方には、慣れやすいのでは
  • 今後は、Swiftだし
  • 2.0とかで、Optionalもよくなるんじゃないかな?と思います
  • ヘッダーがないのは楽
  • SDKについて知っているかが、工数では大きく影響が出る

感想

  • 結局は、Optional型に悩む
  • SDKの知識や、SDKを調べるのは変わりがない
  • Storyboardについてはどうなんだろう?