Передать ключ словаря в CFDictionaryGetValue

Я получаю головную боль из-за UnsafePointer в Swift.

Это метод, который я хочу вызвать:

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 ответ

Решение

Самое простое решение - воспользоваться бесплатной связью между 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)
    }
}
Другие вопросы по тегам