DeNA × Sansan iOS Engineer night に行ってきた

遅ればせながらアップ
#DeNA × Sansan iOS Engineer night
2015/10/22
http://connpass.com/event/21159/

#Swift Class or Struct
Akifumi @DeNA
## Classの問題点

  1. 暗黙の共有(参照型)
  2. 継承問題
  3. 型ロスト、ダウンキャストでロストする

##Struct
Class:参照型
Struct:値型

StructでもProtocolを継承できる。

## Swiftはプロトコル指向言語である。Classの問題点に悩まされずに済むので使ってみましょう。

#iOS9 ショートカット
金子拓司 @Sansan
##Home screen quick actions
ホーム画面で3D Touch使うと出てくる

### Static quick actions

  • ユーザーの状態に依存しないアクション
  • インストールすると使える
  • 固定のアクション

### Dynamic quick actions

  • ユーザーの状態に依存するアクション
  • 起動しないと使えない
  • 起動しないと更新されない
  • version info をplistに保存しておくとよい

##Search API

  • Spotlight API
  • 検索indexにデータを追加する

CSSearchaleItemとか

  • Spotlightからの起動

## ショートカット作り過ぎると

  • UIApplicationDelegateが肥大化する
  • リファクタリングする
  • 目的の画面に至るまでに、複雑な画面遷移が必要になる。
  • Modalで画面を出しても支障ないのなら、そうする。

#Xcode7 Tips
Koji @DeNA
##Storyboard Reference
複数人で触るとコンフリクトする悩みから解放
Editor -> Refactor Storyboard

##UIStackView
AutoLayoutの制約を何個も使わなくていいから楽。
左から右にStackViewを積む
##ExtraView
##UI Test

  • テストコードをswiftで書ける
  • シュミレーターでの動作を記録して、テストコードを生成してくれる

##Swift
playgroundでライブコーディング
###try catch

  • try? try!
  • type safe
  • guard

if文をスッキリ書き換えられる

  • デフォルト引数の補完がよくなった

## Bundle Identifier
BuildSettingsに追加された。Debugとか構成ごとに自在に変えられるので便利。

#iOS Refactoring
Sansan @kazu0620

## Anti Pattern

 enum使おう

  • CGRectMakeFrame

動的なviewでもstoryboard、Auto Layout で意外といける

  • modeが大すぎ、8個? 過剰な分岐が必要になる
  • クラスの名前が抽象的。責務を限定して、分かりやすい名前にする。

### Fat ViewController

  • 行数が多すぎ
  • Modelで切り出す
  • Viewで切り出す
  • チュートリアルやガイダンスの状態管理を別のモデルクラスで切り出す
  • 複数のmodelを書き換える。serviceクラスを使う

### AppDelegateの肥大化
NSNotificationは各View Controllerで
### Fat Storyboard
### Notification, Delegate, KeyObserver
通知元と通知先の関係を考える.
1対1か、1対N か

### 悪いコードを放置しない