代码之家  ›  专栏  ›  技术社区  ›  JAL

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

  •  2
  • JAL  · 技术社区  · 8 年前

    考虑一个私人 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

    引用此类内容的最明显方式是通过桥接头。但是有什么方法可以引用这个吗 CF / 使用纯Swift,例如 @_silgen_name

    首先,我尝试:

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

    但编译器抱怨:

    @_silgen_名称不能应用于此声明

    NSLocaleKey公司 值被桥接到Swift,作为 NSLocale.Key :

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

    即使这样,编译器也会抱怨与上述相同的错误。这就是我被卡住的地方。做 @_silgen_名称 只为功能工作?我要问的是纯斯威夫特可能吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   JAL    8 年前

    截至撰写时(2017年8月8日),目前任何版本的Swift(3或4)都无法实现这一点。

    @_silgen_name @_cdecl 处理函数,但不处理变量。

    这一点得到了苹果公司Swift编译器工程师Jordan Rose的证实 Twitter .

    anything but func is hard.