在swift项目

时间:2016-02-17 10:29:04

标签: ios objective-c swift bridge

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

生成的多个常量
#define constantName VALUE

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

4 个答案:

答案 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+(@".*")

替换.h

FOUNDATION_EXPORT NSString *const $1;

替换.m

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文件。