2017-03-28 4 views
1

Rust 애플리케이션에서 Objective-C 기능을 다른 바인딩 계층을 통해 사용하고 있습니다. 지금까지는 Objective-C 함수를 호출하고 문제없이 필요한 기능을 구현하는 것이 간단했습니다. 하지만 지금은 해결 방법을 모르는 장애물을 발견 한 것 같습니다. CoreGraphics의 일부 함수는 제대로 작동하려면 여러 상수가 필요합니다.특정 Objective-C 상수의 실제 값은 어떻게 결정합니까?

그래서 문제는 어떻게 특정 상수의 실제 값을 얻을 수 있습니까? 예를 들어, CGRectInfinite 상수 값 (CoreGraphics)을 얻고 싶다고 가정 해 봅시다.

정수 상수/열거 형의 경우 매우 간단했습니다. 방금 Xcode를 열고 필요한 값을 포함하는 적절한 헤더 파일로 이동 한 다음 값을 응용 프로그램에 복사하여 붙여 넣었습니다. 상수가 CGRect과 같은 경우 어떻게해야합니까?

답변

1

extern const은 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

관련 문제