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 の宣言部のソースが表示されます。