6

以前のバージョンの Swift で実行可能なコードは次のとおりです。

 let imageOptionsDictKeys = [ kCVPixelBufferPixelFormatTypeKey, kCVPixelBufferWidthKey,  kCVPixelBufferHeightKey, kCVPixelBufferOpenGLESCompatibilityKey, kCVPixelBufferIOSurfacePropertiesKey]
 let imageOptionsDictValues = [ cvPixelFormatType,  frameW, frameH, boolYES]

 var keyCallbacks = kCFTypeDictionaryKeyCallBacks
 var valueCallbacks = kCFTypeDictionaryValueCallBacks

 let imageOptions = CFDictionaryCreate(kCFAllocatorDefault, UnsafeMutablePointer(imageOptionsDictKeys), UnsafeMutablePointer(imageOptionsDictValues), 4, &keyCallbacks, &valueCallbacks)

UnsafeMutablePointer<UnsafeRawPointer?>Swift 3.0 の変更後、 CFDictionary を作成するためにキーと値の配列を変換する必要があります。

こちらです:

    let imageOptionsDictKeysPointer =  UnsafeMutablePointer<UnsafeRawPointer?>.allocate(capacity: 1)
    imageOptionsDictKeysPointer.initialize(to: imageOptionsDictKeys)

Bad Access エラーが発生します。

そしてドキュメントを読んだ後、私はこのコードをコンパイルしようとしています:

        let imageOptionsDictKeys = [kCVPixelBufferPixelFormatTypeKey, kCVPixelBufferWidthKey,  kCVPixelBufferHeightKey, kCVPixelBufferOpenGLESCompatibilityKey]
        let imageOptionsDictKeysRawPointer = Unmanaged.passUnretained(imageOptionsDictKeys).toOpaque()
        let imageOptionsDictKeysPointer =  UnsafeMutablePointer<UnsafeRawPointer?>.allocate(capacity: 1)
        imageOptionsDictKeysPointer.initialize(to: imageOptionsDictKeysRawPointer)

        let imageOptionsDictValues = [ cvPixelFormatType,  frameW, frameH, boolYES]
        let imageOptionsDictValuesRawPointer = Unmanaged.passUnretained(imageOptionsDictValues).toOpaque()
        let imageOptionsDictValuesPointer =  UnsafeMutablePointer<UnsafeRawPointer?>.allocate(capacity: 1)
        imageOptionsDictValuesPointer.initialize(to: imageOptionsDictValuesRawPointer)

        let imageOptions = CFDictionaryCreate(kCFAllocatorDefault, imageOptionsDictKeysPointer, imageOptionsDictValuesPointer, 4, &keyCallbacks, &valueCallbacks)

しかし、エラー Generic parameter 'Instance' could not be inferredが行Unmanaged.passUnretained( array ).toOpaque()に表示されます

プログラムで CFDictionary を作成する方法がわかりません。

4

1 に答える 1

-1

UnsafeMutablePointer< UnsafeMutablePointer<T>>ここで見つけることができる 配列を変換する同様の問題を解決しました: Swift 3 UnsafeMutablePointer initialization for C type float**

同じスキームを使用して迅速な配列を変換するには、UnsafeMuTablePointerここで提案されているように使用します: http://technology.meronapps.com/2016/09/27/swift-3-0-unsafe-world-2/

于 2016-10-19T15:22:53.453 に答える