我对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文件,我可以使用常量。我不知道这是正确的方式,也不希望等待好的答案。
答案 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代码无法使用这些文件。