0

Swift の UnsafePointer が原因で頭痛がします。

これは私が呼び出したいメソッドです:

func CFDictionaryGetValue(theDict: CFDictionary!, _ key: UnsafePointer<Void>) -> UnsafePointer<Void>

そして、これが私のやり方です。

 let ds: SCDynamicStoreRef = SCDynamicStoreCreate(nil, "setNet" as CFString, nil, nil)!


let list = SCDynamicStoreCopyProxies(ds)

print(list!)
print(CFDictionaryGetValue(list, UnsafePointer("HTTPPort")))

ただし、これはエラーを返します。このメソッドに辞書キーを渡す方法がわかりません。を削除して代わりにUnsafePointer("HTTPPort")使用すると、実行時エラーが発生します。」"HTTPPort"

辞書の値にどのようにアクセスできますか?

4

1 に答える 1

1

CFDictionary最も簡単な解決策は、との間の無料のブリッジングNSDictionaryを利用し、NSDictionary アクセサ メソッドを使用することです。

let ds = SCDynamicStoreCreate(nil, "setNet", nil, nil)!

if let list = SCDynamicStoreCopyProxies(ds) as NSDictionary? {
    if let port = list[kSCPropNetProxiesHTTPPort as NSString] as? Int {
        print("HTTPPort:", port)
    }
}

ただし、完全を期すために、次の方法で実行できます CFDictionaryGetValue

if let list = SCDynamicStoreCopyProxies(ds)  {
    let key = kSCPropNetProxiesHTTPPort
    let port = unsafeBitCast(CFDictionaryGetValue(list, unsafeAddressOf(key)), NSObject!.self)
    if port != nil {
        print("HTTPPort:", port)
    }
}
于 2016-03-23T09:58:02.770 に答える