2017-03-28 72 views
1

我在我的Rust應用程序中通過不同綁定層使用Objective-C函數。到目前爲止,調用Objective-C函數和實現所需功能沒有任何問題很簡單。但是現在看來,我發現了一個我不知道如何解決的障礙,CoreGraphics中的一些功能需要幾個常量才能正常工作。如何確定某些Objective-C常量的實際值?

所以問題是我怎樣才能得到一個特定常數的實際值?例如,假設我想得到CGRectInfinite常量(CoreGraphics)的值,​​是否有可能得到它?

對於整數常量/枚舉,它非常簡單 - 我只需打開XCode並導航到合適的頭文件,其中包含所需的值,然後我將這些值複製粘貼到我的應用程序中。但是如果一個常量像CGRect那樣怎麼辦?

回答

1

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. 

,但你不應該依靠不斷的實際值。

+0

似乎是一個很好的解決方案,謝謝! – ScienceSE

相關問題