【问题标题】:Access constant in swift from Objective-C file从Objective-C文件快速访问常量
【发布时间】:2015-11-04 15:12:58
【问题描述】:

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

#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 文件。我不知道这是正确的方法还是不希望并等待好的答案。

【问题讨论】:

  • 你已经在正确的轨道上。 :) 您的编辑正是我在 Swift 中使用常量的方式。虽然,你不能再称它们为宏了。它们只是 Swift 中的常量

标签: ios objective-c iphone swift constants


【解决方案1】:

视情况而定。

来自文档

简单宏

您通常使用#define 指令定义原语的地方 C 和 Objective-C 中的常量,在 Swift 中使用全局常量 反而。例如,常量定义#define FADE_ANIMATION_DURATION 0.35 可以用 Swift 更好地表达 let 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

【讨论】:

  • Vadian 在看到这篇文章后,我还决定为 Swift 类制作单独的常量文件。但是,很抱歉没有让您的回答被接受:)
猜你喜欢
  • 1970-01-01
  • 2014-11-30
  • 2017-09-07
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多