从Objective-C文件中以swift访问常量

时间:2015-08-12 06:51:13

标签: ios objective-c iphone swift constants

我对Swift很新。我有一个混合项目,其中一些类在Objective-C中,一些是Swift。我有一个基于Objective-C文件的Constant.h文件。在这个头文件中提到了一些像bellow一样的常量

#define mainViewBgColor [UIColor colorWithRed:248.0/255.0 green:247.0/255.0 blue:247.0/255.0 alpha:1.0]

但问题是我无法在Swift类中访问此常量。请参阅下面的Swift代码

override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = mainViewBgColor //Want to access liek this but this line gives me an error.
        self.loadNavigation();
    }

请建议正确访问常量的正确方法,特别是Objective-C中的常量写入。

注意:请考虑我有Bridging-Header.h文件,我已经将常量文件导入到该桥文件中。即使我可以成功访问简单的字符串常量。

被修改 替代解决方案:我发现在swift中使用常量的替代解决方案是创建新的swift常量文件,让我们说SwiftConstant.swift并在此文件中定义类似于下面的常量。

let  mainViewBgColor = UIColor(red: 248.0/255.0, green: 247.0/255.0, blue: 247.0/255.0, alpha: 1.0)

现在没有导入SwiftConstant.swift文件,我可以使用常量。我不知道这是正确的方式,也不希望等待好的答案。

1 个答案:

答案 0 :(得分:4)

取决于。

来自文档

  

简单宏

     

您通常使用#define指令定义基元   在C和Objective-C中常量,在Swift中使用全局常量   代替。例如,常量定义#define   使用let可以在Swift中更好地表达FADE_ANIMATION_DURATION 0.35   FADE_ANIMATION_DURATION = 0.35。 因为简单的常量宏   直接映射到Swift全局变量,编译器自动完成   导入在C和Objective-C源文件中定义的简单宏。

     

复杂的宏

     

复杂的宏在C和Objective-C中使用但没有对应的   在斯威夫特。复杂的宏是不定义常量的宏,   包括带括号的,类似函数的宏。您使用复杂的宏   在C和Objective-C中避免类型检查约束或避免   重新输入大量的样板代码。但是,宏可以做   调试和重构很困难。在Swift中,您可以使用函数   和泛型,以达到相同的结果,没有任何妥协。   因此,C和Objective-C源代码中的复杂宏   您的Swift代码无法使用这些文件。

来源:Using Swift with Cocoa and Objective-C

相关问题