使用#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 = ;
我正在做一个 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 = ;