| categories:swift develop

performSelectorは無くなる

ほぼ全ての拙作のアプリでは、テーブルセルでのバーの色変更タップとアップデートは時間差を使って行っています。

[NSObject cancelPreviousPerformRequestsWithTarget:self
                                         selector:@selector(notifiyUpdate)
                                           object:nil];
[self performSelector:@selector(notifiyUpdate)
           withObject:nil
           afterDelay:kUpdateCellShortInterval];

object-cで上記に書かれたperformSelectorはSwiftでは無くなってしまったようなので、以下のコードでは動かない。

 NSObject.cancelPreviousPerformRequestsWithTarget(self, selector: notify, object: nil)
 NSObject.performSelector(notify, withObject: self, afterDelay: Interval.UpdateCell)

幾つかの方法があるようですが、タイマーを使った方法が簡易でよいのですが、cancelPreviousPerformRequestsWithTargetが無用になってしまう。処理の事前キャンセルも必要があるので、少し修正して最終的には以下のようになる。

private var tapTimer: NSTimer?

// 処理
cancelTimer()
tapTimer = NSTimer.scheduledTimerWithTimeInterval(Interval.UpdateCell, target: self, selector:  notify, userInfo: nil, repeats: false)
//

func cancelTimer() {
    if tappingTimer != nil {
        tappingTimer!.invalidate()
    }
}
comments powered by Disqus