2016-06-14 61 views
0

我试图将project从objective-c转换为swift。我在转换#define时遇到了一些问题。Swift 2 - 将objective-C#define转换为swift

我所拥有的是:

#define Mask8(x) ((x) & 0xFF) 
    #define R(x) (Mask8(x)) 
    #define G(x) (Mask8(x >> 8)) 
    #define B(x) (Mask8(x >> 16)) 

UInt32 color = *currentPixel; 
     printf("%3.0f ", (R(color)+G(color)+B(color))/3.0); 

我怎样才能将它转换为变量迅速?

+0

你见过这个线程吗? http://stackoverflow.com/questions/24325477/how-to-use-a-objective-c-define-from-swift –

+0

嗨,谢谢我已经看到了这一步,但我不明白为什么这个Objective-C宏为'Mark8 '以及如何转换它 – SNos

回答

0

4只#define在你的问题不是提供给斯威夫特,请参见在https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html

如果你想在斯威夫特提供其等效题为复杂的宏,你将需要重新实现它们迅速。一个简单的方法,假设宏参数是UInt32型的,因为它是在你的榜样,可能如下:

func swiftMask8(x:UInt32) -> UInt32 
{ 
    return x & 0xFF 
} 

func swiftR(x:UInt32)->UInt32 
{ 
    return swiftMask8(x) 
} 
... 

当然,你可以删除swift部分并调用函数Mask8“R`等等,因为它们的Objective-C等价物对Swift来说是不可见的。

+0

非常感谢。最后我使用了使用目标c桥文件的函数...我将再次尝试转换它并让您知道 – SNos