使用#define constant put in Objective C .h file bridged in swift project

Use #define constant put in Objective C .h file bridged in swift project

我正在做一个 swift 项目,我已经创建了 MyProjectName-Bridging-header.h 在这个桥中,我添加了一个 .h 文件,其中包含

制作的多个常量
#define constantName VALUE

我需要知道如何在我的 swift 文件中使用这些常量?

一般桥接头文件用于在swift中添加objective个文件。对于常量,您可以创建 constants.swift 文件并使用 var 关键字添加您的常量。

var constant   =          "value"

无需导入 constants.swift 文件即可在任何地方使用上述常量。

make simple Constant.swift 

import UIKit

class Constant: NSObject {

    // make your constant like this get rid from macros 
    static let AppFontBold = "HelveticaNeue-Bold"
    static let AppFontRegular = "HelveticaNeue"
    static let iPhoneFontSize : CGFloat = 17
    static let iPadFontSize : CGFloat = 24

}

Note : you can invoke your constant like Constant.AppFontBold

不要用宏定义常量

使用宏代替全局常量或函数是 code smell 的明确标志 – 它们不是 type-safe 并且会使调试成为一场噩梦。值得庆幸的是,Swift 取消了 C 预处理器,因此您不能再将它们与 Swift 代码一起使用!

您应该改为使用全局 C 常量在 Objective-C header 中定义常量。

static NSString* const aConstString = @"foobar";
static NSInteger const aConstInteger = 42;

或者,如果您想将这些值排除在 header 之外:

extern NSString* const aConstString;
extern NSInteger const aConstInteger;

NSString* const aConstString = @"foobar";
NSInteger const aConstInteger = 42;

然后这些将被桥接到 auto-generated Swift header 中的 Swift 全局常量,看起来像这样:

public let aConstString: String
public let aConstInteger: Int

您现在可以通过 Swift 代码访问它们。

你根本做不到。我建议使用 ObjC 常量的 this kind

我认为 simplest/quickest 解决方案是用 .m 和 运行 一个简单的正则表达式来复制你所有的 .h 常量文件来转换你的定义。

一组简单的正则表达式是:(不处理转义引号)

查找#define

#define\s+(\w+)\s+(@".*")

替换为.h

FOUNDATION_EXPORT NSString *const ;

替换为.m

NSString *const = ;