LoginSignup
33
34

More than 5 years have passed since last update.

Swift1.2 で `touchesBegan` が変わった

Posted at

Swift1.2 で Set が使えるようになったのですが、単に使えるようになっただけでなく、一部のメソッドで使われています。
この例が、タッチを検出する
touchesBegan メソッドです。
タッチ位置を知るためにこのメソッドをオーバーライドするケースがありますが、Swift1.1 まででは

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
}

でしたが、Swift 1.2 では、このメソッドが、
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
}

となり、touches のタイプが NSSet から Set<Object> になります。
NSSetのときには touches.allPbjects[0].locationInView(viewName) でポジションが得られたのですがこれがコンパイルエラーとなります。Set のメンバにAllObjects がないためです。
解決法は、以下のようにしました。

let touch = touches.first as! UITouch
var pos = touch.locationInView(viewName)

上記の例で、 as! UITouch も Swift 1.1 では as UITouch でOKでしたが、 Swift 1.2 ではこのようにunwrap しないとエラーです。
NSString のエラーは比較的簡単にとれますが、このSet のエラーは、結構時間がかかりました。
なお、Set のメソッドを調べるには、Set を選択して Command + クリックでSet の宣言部のソースが表示されます。

33
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
34