Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 652 - longPressed()はまだまだ準備中(^^;)

次のTable Viewのチュートリアルを拡張しています。

yataiblue.hatenablog.com

ロングプレス・ジェスチャーの中核を担うメソッドを実装中です。

func longPressed(longPress: UILongPressGestureRecognizer) {
  print("This method's just called.")
  let state = longPress.state
  let locationInView = longPress.locationInView(simpleTableView)
  let indexPath = 
   simpleTableView.indexPathForRowAtPoint(locationInView)
.....

次はロングプレスで選択したCell(セル)を用意します。少し大きくして浮かび上がったように見えるようにします。longPressedメソッドは、ジェスチャーの状態が変化する度に呼ばれるので、このメソッド内に普通のプロパティを持たせると、必要も無いのに幾つも作られてしまうのでメモリーの無駄です。扱うセルは1つでいいので、こういう時に使用するのがタイプ・プロパティですね*1

私の読んでいるチュートリアル*2では次のように用意されていました。

struct My {
  static var cellSnapshot: UIView? = nil
}
        
struct Path {
  static var initialIndexPath : NSIndexPath? = nil
}

どうして2つに分けてしまうのか私には理解し難いので次のように変更しました。もし理由があるのなら教えてください。ベテランプログラマーの皆さんm(_ _)m

struct MyCell {
  static var cellSnapshot: UIView? = nil
  static var initialIndexPath : NSIndexPath? = nil
}

このタイプ・プロパティを使って、ジャスチャーの効果が波及している期間のセルのスナップショットとインデックス情報を保持する訳ですね。

理解できたので今日は終わり。

*1:自分で説明をしていながら、「タイプ・プロパティって何だ?」状態でした(^_^;) ->Swiftで遊ぼう! - 564 - 構造体、タイプ・メソッドとタイプ・プロパティ - Swiftで遊ぼう! on Hatena

*2:知っている人は分かりますね。分からなければ質問してください。公開します。