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

标签 objective-c rust core-graphics ffi

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

所以问题是我怎样才能得到特定常量的实际值?例如,假设我想获取 CGRectInfinite 常量 (CoreGraphics) 的值,是否可以获取它?

对于整数常量/枚举,这非常简单——我只是打开 XCode 并导航到适当的头文件,其中包含所需的值,然后我只是将这些值复制粘贴到我的应用程序中。但是,如果常量类似于 CGRect,该怎么办?

最佳答案

extern const 在 C 中可以在 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.

但您不应该依赖常量的实际值。

关于objective-c - 如何确定某些 Objective-C 常量的实际值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43071345/

相关文章:

ios - 在 UIView 中的贝塞尔曲线路径内绘制/绘制草图颜色

rust - 如何在 Rust 中使用 vec 实现过滤器

ios - CGLayer、CALayer 和 CGContext 的区别

ios - UIBezierPath行程不完整

ios - 在 iOS 8 上获取屏幕尺寸

objective-c - 在分配的 UIViewController 上设置属性

ios - 如何在 Objective C 中从键盘的数字侧开始

multithreading - "the type does not fulfill the required lifetime"在线程中使用方法时

rust - 在 Vec 的中间或开头高效地插入或替换多个元素?

objective-c - 没有 mask 层的 UIView 圆角