2017-03-28 11 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の使用は危険です。それにアクセスするための安全なラッパーを提供する方がよいでしょう。

#[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. 

ていますが、一定の実際の値に依存しないでください。

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

actual value of CGRectInfiniteは、途中で、あります。

+0

いいソリューションのようですね、ありがとう! – ScienceSE

関連する問題