iOS:如何在Constants.h中转换字符串中的类型?

时间:2018-03-30 15:51:26

标签: ios objective-c swift nsstring constants

我有一段代码适用于类声明和字符串声明,但我想知道在字符串中转换类名声明的方法来保存代码。这是一个有效的例子:

#define FORM_TO_USE             RegistrationForm_Renault_Sport
#define FORM_TO_USE_SWIFT       @"RegistrationForm_Renault_Sport"

但我想要更通用的东西,例如:

#define FORM_TO_USE             RegistrationForm_Renault_Sport
#define FORM_TO_USE_SWIFT       [NSString stringWithFormat:@"%@",FORM_TO_USE]

#define FORM_TO_USE             RegistrationForm_Renault_Sport
#define FORM_TO_USE_SWIFT       String(FORM_TO_USE)

但最后两个例子并不奏效。

我的目标是在swift中使用它:

    let anyobjectype : AnyObject.Type = NSClassFromString(FORM_TO_USE_SWIFT)!
    let nsobjectype : NSObject.Type = anyobjectype as! NSObject.Type
    let fieldsObjC: AnyObject = nsobjectype.init()

错误消息:
enter image description here 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我的解决方案是为每个#define宏创建一个Objective-C类方法 - 返回宏值。例如。

<强> Constants.h

#define FORM_TO_USE             RegistrationForm_Renault_Sport
#define FORM_TO_USE_SWIFT       [NSString stringWithFormat:@"%@",FORM_TO_USE]

@interface Constants : NSObject

+ (NSString *)formToUseSwift;

@end

<强> Constants.m

@implementation Constants

+ (NSString *)formToUseSwift {
  return FORM_TO_USE_SWIFT;
}

@end

Swift文件

let anyobjectype : AnyObject.Type = NSClassFromString(Constants.formToUseSwift())!
let nsobjectype : NSObject.Type = anyobjectype as! NSObject.Type
let fieldsObjC: AnyObject = nsobjectype.init()

在我看来,这是避免在两个不同方面有两个相似代码的唯一可行方法。

<强>示例

https://github.com/trungducc/stackoverflow/tree/swift-constant-from-objective-c