2016-03-23 5 views
0

SwiftのUnsafePointerのために頭痛がでています。辞書キーをCFDictionaryGetValueに渡します。

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

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"を使用している場合は代わりに私は、ランタイムエラーを取得します。」

をあなたは辞書の値にアクセスするにはどうすればよい?

答えて

1

最も簡単な解決策はCFDictionaryNSDictionary間の通話料無料の橋渡し を利用することです

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) 
    } 
} 

しかし、単に完全を期すため:、およびNSDictionary アクセサメソッドを使用することがで行うことができますCFDictionaryGetValue

if let list = SCDynamicStoreCopyProxies(ds) { 
    let key = kSCPropNetProxiesHTTPPort 
    let port = unsafeBitCast(CFDictionaryGetValue(list, unsafeAddressOf(key)), NSObject!.self) 
    if port != nil { 
     print("HTTPPort:", port) 
    } 
} 
+0

ありがとうございました。これらの安全でないポインタは不快なものです。 – brumbrum

+0

返された辞書は読み込み専用であることが判明しました。時間があり、システム構成フレームワークについて知っているなら、http://stackoverflow.com/questions/36175502/set-current-proxy-settingsを見てください。 – brumbrum

関連する問題