我在访问 CFDictionary 中的特定(或任何)键时遇到问题。
老实说,我真的不明白你需要在 Swift 中执行此操作的方式,而且我认为它过于复杂......
My Code:
if let session = DASessionCreate(kCFAllocatorDefault) {
let mountedVolumes = FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: [], options: [])!
for volume in mountedVolumes {
if let disk = DADiskCreateFromVolumePath(kCFAllocatorDefault, session, volume as CFURL) {
let diskinfo = DADiskCopyDescription(disk);
var volumeValue = CFDictionaryGetValue(diskinfo, <#T##key: UnsafeRawPointer!##UnsafeRawPointer!#>)
}
}
我想要实现的目标:获取键或字段的值DA卷网络到变量中体积值。
我想我需要通过kDADiskDescriptionVolumeNetworkKey to the CFDictionaryGetValue方法?我该如何实现这一目标?
不要使用CFDictionary
在斯威夫特. (这是可能的,但不值得付出努力,见下文。)
-
CFDictionary
是免费的
桥接与NSDictionary
,反过来又可以转换为 SwiftDictionary
.
- 的价值
kDADiskDescriptionVolumeNetworkKey
关键是一个CFBoolean
可以转换为 SwiftBool
.
Example:
if let session = DASessionCreate(kCFAllocatorDefault),
let mountedVolumes = FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: []) {
for volume in mountedVolumes {
if let disk = DADiskCreateFromVolumePath(kCFAllocatorDefault, session, volume as CFURL),
let diskinfo = DADiskCopyDescription(disk) as? [NSString: Any] {
if let networkValue = diskinfo[kDADiskDescriptionVolumeNetworkKey] as? Bool {
print(networkValue)
}
}
}
}
只是为了完整性:这是必要的指针
打电话杂耍CFDictionaryGetValue
在斯威夫特 3 中:
if let session = DASessionCreate(kCFAllocatorDefault),
let mountedVolumes = FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: []) {
for volume in mountedVolumes {
if let disk = DADiskCreateFromVolumePath(kCFAllocatorDefault, session, volume as CFURL),
let diskinfo = DADiskCopyDescription(disk) {
if let ptr = CFDictionaryGetValue(diskinfo, Unmanaged.passUnretained(kDADiskDescriptionVolumeNetworkKey).toOpaque()) {
let networkValue = Unmanaged<NSNumber>.fromOpaque(ptr).takeUnretainedValue()
print(networkValue.boolValue)
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)