gpt4 book ai didi

swift - 我可以使用@_silgen_name 来公开不是 Swift 函数的 [Objective-]C 或 C++ 符号吗?

转载 作者:行者123 更新时间:2023-11-28 06:14:45 24 4
gpt4 key购买 nike

考虑一个私有(private)的 CFLocaleKey,它稍后被桥接为一个 NSLocaleKey (NSString) 以在内部与 NSLocale 一起使用:

CF_EXPORT const CFLocaleKey kCFLocaleTemperatureUnit API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0));

CFLocale_Private.h

引用此类内容的最明显方法是通过桥接 header 。但是有没有一种方法可以使用 @_silgen_name 之类的东西在纯 Swift 中引用此 CF/NSLocaleKey

首先我尝试了:

@_silgen_name("NSLocaleTemperatureUnit")
public let temperatureUnit: NSLocale.Key

但是编译器提示:

@_silgen_name cannot be applied to this declaration

好吧,让我们让它成为静态的,但是静态属性只能在一个类型上声明。所以我尝试以其他 NSLocaleKey 值桥接到 Swift 的方式设置它,作为 NSLocale.Key 的扩展:

extension NSLocale.Key {
@_silgen_name("NSLocaleTemperatureUnit")
public static let temperatureUnit: NSLocale.Key
}

即便如此,编译器仍会报出与上述相同的错误。这就是我卡住的地方。 @_silgen_name 是否仅适用于函数?使用纯 Swift 甚至可以实现我的要求吗?

最佳答案

截至撰写本文时(2017 年 8 月 8 日),目前这对于任何版本的 Swift(3 或 4)都是不可能的。

没有 header 声明,clang 不确定如何将 Swift 中的某些内容映射回 C。@_silgen_name@_cdecl 适用于函数,但不适用于变量.

Apple 的 Swift 编译器工程师 Jordan Rose 在 Twitter 上证实了这一点.

tl;博士:

anything but func is hard.

关于swift - 我可以使用@_silgen_name 来公开不是 Swift 函数的 [Objective-]C 或 C++ 符号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45512413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com