Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Swift调用专用macOS CoreFoundation函数_Swift_Macos_Nsuserdefaults_Core Foundation_Iphone Privateapi - Fatal编程技术网

如何从Swift调用专用macOS CoreFoundation函数

如何从Swift调用专用macOS CoreFoundation函数,swift,macos,nsuserdefaults,core-foundation,iphone-privateapi,Swift,Macos,Nsuserdefaults,Core Foundation,Iphone Privateapi,我正在寻找一种在Swift代码中使用私有Apple API的方法(即,\u CFPreferencesCopyApplicationMap,它允许您查找用于任何给定应用程序的用户默认值的路径) 有关动机和目标C解决方案,请参见答案。我能够在Objective-C中使用以下行完成此操作: extern CFDictionaryRef _CFPreferencesCopyApplicationMap(CFStringRef userName, CFStringRef hostName); 我还不知

我正在寻找一种在Swift代码中使用私有Apple API的方法(即,
\u CFPreferencesCopyApplicationMap
,它允许您查找用于任何给定应用程序的用户默认值的路径)

有关动机和目标C解决方案,请参见答案。我能够在Objective-C中使用以下行完成此操作:

extern CFDictionaryRef _CFPreferencesCopyApplicationMap(CFStringRef userName, CFStringRef hostName);

我还不知道如何在Swift中实现同样的功能。我知道可以在运行时使用
NSClassFromString
NSSelectorFromString
动态访问ObjC对象,但据我所知,这些对象不能与全局C函数一起使用
NSInvocation
看起来也一样。

事实证明,这可以通过以下方式实现:


你这样做是对的。使用目标C。
@_silgen_name("_CFPreferencesCopyApplicationMap")
func _CFPreferencesCopyApplicationMap(_: CFString!, _: CFString!) -> CFDictionary!

// Then, call as:
let applicationMap = _CFPreferencesCopyApplicationMap(kCFPreferencesCurrentUser, kCFPreferencesAnyHost) as? [String: [URL]]