如何确定某些Objective-C常量的实际值?

时间:2017-03-28 13:47:53

标签: objective-c rust core-graphics ffi

我通过不同的绑定层在Rust应用程序中使用Objective-C函数。到目前为止,调用Objective-C函数并实现所需的功能并没有任何问题。但现在看来我发现了一个我不知道如何解决的障碍,CoreGraphics中的一些函数需要几个常量才能正常工作。

所以问题是如何获得特定常数的实际值?例如,让我们说我想得到CGRectInfinite常量值(CoreGraphics),是否有可能得到它?

对于整数常量/枚举,它非常简单 - 我只是打开XCode并导航到包含所需值的相应头文件,然后我只是将值复制粘贴到我的应用程序中。但是,如果常量类似于CGRect

,该怎么办?

1 个答案:

答案 0 :(得分:1)

C中的

extern const可以在Rust中声明为static

extern {
    pub static CGRectInfinite: CGRect;
}

使用CGRectInfinite是不安全的。你最好提供一个安全的包装来访问它。

impl CGRect {
    pub fn infinite() -> CGRect {
        unsafe { CGRectInfinite }
    }
}

顺便说一下,actual value of CGRectInfinite是:

#[cfg(target_pointer_width="64")]
pub const CGRectInfinite: CGRect = CGRect {
    origin: CGPoint {
        x: -0.5 * f64::MAX,
        y: -0.5 * f64::MAX,
    },
    size: CGSize {
        width: f64::MAX,
        height: f64::MAX,
    },
};

// similar on 32-bit, replacing f64 by f32.

但你不应该依赖常数的实际值。