読者です 読者をやめる 読者になる 読者になる

Cocoa API解説(macOS/iOS)

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。

目次

CocoaのためのCポインタの取り扱いその2 [Swift]

swift コラム

前回の続きcocoaapi.hatenablog.com


ポインタの初期化をするときは

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の場合は自動的に拡張されるのだろうか?
もうちょっと調べてみよう。

続くcocoaapi.hatenablog.com

関連記事(外部サイト)

developer.apple.com

更新時のバージョン

OS X 10.10.3
Swift1.2