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

标签 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)

但是最后两个例子不起作用。

我的目标是快速使用它:

    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 有什么想法吗?

最佳答案

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

常量.h

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

@interface Constants : NSObject

+ (NSString *)formToUseSwift;

@end

常量.m

@implementation Constants

+ (NSString *)formToUseSwift {
  return FORM_TO_USE_SWIFT;
}

@end

快速文件

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

关于iOS:如何在 Constants.h 中转换字符串中的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49577399/

相关文章:

iphone - 从 SQLite 读取 - FMDB - 初学者

ios - 使用函数重新加载表/数组?

IOS - 相同的 ASIHTTPRequest 代码仅适用于一种方法

swift - FirebaseAuth、来自提供商的 JWT 在调用 updateEmailUpdate 之前不包含电子邮件地址

ios - UITableViewCell 内的 AVPlayer 与其他 View 自动布局

ios - 如何将 rbcollectionviewinfofolderlayout 与自定义 UICollectionViewCell 和 CollectionViewLayout 一起使用

ios - 带有后退按钮的导航栏不隐藏

iphone - 选择行后如何更改按钮的标题?

swift SKSprite 从一个游戏场景移动到另一个游戏场景

ios - 音频和TTS DUCK问题