CocoaのためのCポインタの取り扱いその2 [Swift]
ポインタの初期化をするときは
red = UnsafePointer<CGFloat>.alloc(1)
などとUnsafePointerやUnsafeMutablePointerを使えばいいみたいだけれど、NSPointの配列やらNSRectの配列などはどうするんだろう...
NSpointの配列を初期化するときはダミーの数値を入れたがどうもスマートではないなあ。
var points:[NSPoint] = [NSMakePoint(220.0, 50.0), NSMakePoint(220.0,120.0), NSMakePoint(150.0,180.0), NSMakePoint( 80.0,120.0), NSMakePoint( 80.0, 50.0)] aBezier.appendBezierPathWithPoints( &points, count: points.count)
Appleのドキュメントもダミーの値が入っているし
var result: [Float] = [0, 0, 0, 0] vDSP_vadd(a, 1, b, 1, &result, 1, 4)
Interacting with C Pointers - Swift Blog - Apple Developer
いろいろ試してみた。
これではダメ
var rects : [NSRect] = UnsafeMutablePointer<NSRect>.alloc(5)
NSPointArrayとかNSRectArrayなんていう形があるみたいだ。
これでOKみたい。
var points : NSPointArray = UnsafeMutablePointer<NSPoint>.alloc(5)
var rects : NSRectArray = UnsafeMutablePointer<NSRect>.alloc(5)
アクセスするにはコレでいいみたい。
&rects[0]
少しスマートになった。
UnsafeMutablePointerの場合は自動的に拡張されるのだろうか?
もうちょっと調べてみよう。
関連記事(外部サイト)
更新時のバージョン
OS X 10.10.3
Swift1.2