2016-08-05 7 views
1

現在、Objective-Cコードを迅速に変換しています。 私はCFPropertyListを塗りつぶし、そのフォーマットを返す内部APIを持っています。私は私がしようとしていると、その迅速にSwiftのCFPropertyListRefへの参照を使用する

MyFunction(_ list: CFPropertyList!, _ fmt: UnsafeMutablePointer<CFPropertyListFormat>)) 

に変換見ることができる "生成するインターフェイス" を介して

CFDictionaryRef myList; 
CFPropertyListFormat fmt; 
MyFunction(&myList, &fmt) 

を経由して、それを呼んでいるのObjective-Cでは

MyFunction(CFPropertyListRef list, CFPropertyListFormat *fmt); 

すばやく関数を呼び出す

var fmt = CFPropertyListFormat.XMLFormat_v1_0 
var plist = NSDictionary() as CFPropertyListRef 
MyFunction(plist, &fmt) 

私はEXC_BAD_ACCESSを取得しています。 コンパイラはタイプについて文句を言っていないので、これは正しいはずです。 ご迷惑をおかけいたします。 おかげ

答えて

1

のObjective-Cでのご利用が本当に正しい場合には、このようなものにするためにあなたのMyFunctionニーズの機能ヘッダー:

extern void MyFunction(CFPropertyListRef *list, CFPropertyListFormat *fmt); 

CFPropertyListRefは実際のObjective-Cでvoid *のちょうどtypealiasです。/ Cだから、コンパイラはめったに多くの可能なタイプの誤使用のための警告を出力しません)

そしてスウィフト2つの輸入品な関数として:。

public func MyFunction(list: UnsafeMutablePointer<Unmanaged<CFPropertyList>?>, _ fmt: UnsafeMutablePointer<CFPropertyListFormat>) 

だから、あなたは次のようにそれを使用する必要が 、あなたは上記のように、関数のヘッダを変更したと仮定すると:

var fmt: CFPropertyListFormat = .XMLFormat_v1_0 
var umPlist: Unmanaged<CFPropertyList>? = nil 
MyFunction(&umPlist, &fmt) 
var plist = umPlist?.takeRetainedValue() //or this may be `umPlist?.takeUnretainedValue()` 
+0

これは非常によく動作します。どうもありがとうございました –

関連する問題