我正在开发一个快速项目,我已经创建了MyProjectName-Bridging-header.h 在这个桥中,我添加了一个.h文件,其中包含由
生成的多个常量#define constantName VALUE
我需要知道如何将这些常量用于我的swift文件中?
答案 0 :(得分:4)
使用宏代替全局常量或函数是code smell的明确标志 - 它们不是类型安全的&可以让调试成为一场噩梦。值得庆幸的是,Swift取消了C预处理器,因此您无法再使用Swift代码!
您应该使用全局C常量来定义Objective-C头中的常量。
Given(/^the following "(.*?)":$/) do |model, table|
table.hashes.each do |hash|
attributes = Rack::Utils.parse_nested_query(hash.to_query)
object = model_name.classify.constantize.new
attributes.keys.each do |key|
object.send("#{key}=", ERB.new(value).result())
end
...
end
end
或者,如果您想保留标题中的值:
static NSString* const aConstString = @"foobar";
static NSInteger const aConstInteger = 42;
的
extern NSString* const aConstString;
extern NSInteger const aConstInteger;
然后,这些将在您自动生成的Swift标头中桥接到Swift全局常量,并且看起来像这样:
NSString* const aConstString = @"foobar";
NSInteger const aConstInteger = 42;
您现在可以从Swift代码访问它们。
答案 1 :(得分:2)
你根本无法做到。我建议使用this kind的ObjC常量。
我认为最简单/最快的解决方案是使用.h
复制所有.m
常量文件并运行简单的正则表达式来转换定义。
一组简单的正则表达式是:(不处理转义引号)
#define
#define\s+(\w+)\s+(@".*")
FOUNDATION_EXPORT NSString *const $1;
NSString *const $1 = $2;
答案 2 :(得分:1)
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
答案 3 :(得分:-1)
通常桥接头文件用于在swift中添加目标文件。对于常量,您可以使用var keyword来生成constants.swift文件并添加常量。
var constant = "value"
在任何地方使用上面的常量而不导入constants.swift文件。