【问题标题】:pass dictionary key to CFDictionaryGetValue将字典键传递给 CFDictionaryGetValue
【发布时间】:2016-03-23 09:26:13
【问题描述】:

由于 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" 我会收到运行时错误。”

如何访问字典值?

【问题讨论】:

    标签: ios swift cocoa swift2 cfdictionary


    【解决方案1】:

    最简单的解决方案是利用免费桥接 在CFDictionaryNSDictionary 之间,并使用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)
        }
    }
    

    【讨论】:

    猜你喜欢
    • 2012-12-10
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    相关资源
    最近更新 更多