Передать ключ словаря в 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)
}
}