如何确定某些 Objective-C 常量的实际值?
How do I determine the actual values of certain Objective-C constants?
我通过不同绑定层在我的 Rust 应用程序中使用 Objective-C 函数。到目前为止,调用 Objective-C 函数和实现所需功能都很简单,没有任何问题。但现在我似乎发现了一个我不知道如何解决的障碍,CoreGraphics
中的一些函数需要几个常量才能正常工作。
所以问题是我怎样才能得到特定常量的实际值?比如我想获取CGRectInfinite
常量(CoreGraphics)的值,是否可以获取?
对于整数 constants/enums 这非常简单——我只是打开 XCode 并导航到包含所需值的相应头文件,然后我只是将这些值复制粘贴到我的应用。但是,如果常量类似于 CGRect
怎么办?
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.
但是你不应该依赖常量的实际值。
我通过不同绑定层在我的 Rust 应用程序中使用 Objective-C 函数。到目前为止,调用 Objective-C 函数和实现所需功能都很简单,没有任何问题。但现在我似乎发现了一个我不知道如何解决的障碍,CoreGraphics
中的一些函数需要几个常量才能正常工作。
所以问题是我怎样才能得到特定常量的实际值?比如我想获取CGRectInfinite
常量(CoreGraphics)的值,是否可以获取?
对于整数 constants/enums 这非常简单——我只是打开 XCode 并导航到包含所需值的相应头文件,然后我只是将这些值复制粘贴到我的应用。但是,如果常量类似于 CGRect
怎么办?
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.
但是你不应该依赖常量的实际值。