我目前是Java程序员和学习目标C.为了创建JSON对象,我想将以下Java-Pseudocode转换为目标C.然而,由于看起来我想要的所有内容在目标C中不可用,因此我遇到了很多巨大的问题。我自己的变体占用了更多的空间并且更复杂,但是我只是一个初学者,我想知道是否有更简单和简短的方法来实现它。
import java.util.HashMap;
import java.util.Map;
public class Parameters
{
public enum Language {deDE};
protected Language language = null;
// ... other parameters ...
protected static final Map<Language,String> languageToString = new HashMap<>();
static {languageToString.put(Language.deDE,"de-DE");}
Map<String,String> jsonProxy()
{
HashMap<String, String> map = new HashMap<>();
if(language!=null) {map.put("lang", languageToString.get(language));}
return map;
}
}
@interface Parameters : NSObject
enum Lang {deDE};
extern NSMutableDictionary *langToString;
- (id) proxyForJson;
extern int test;
@end
@implementation Parameters
enum Lang* lang = nil;
NSMutableDictionary *langToString;
-(CommunicationParameters*) init
{
self = [super init];
return self;
}
+(void) initialize
{
langToString = [[NSMutableDictionary alloc] init];
[langToString setObject:@"de-DE" forKey:[NSNumber numberWithInt:deDE]];
}
-(id) proxyForJson
{
NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] init];
if(lang!=nil)
{
[dictionary setObject:[langToString objectForKey:[NSNumber numberWithInt:*lang]] forKey:@"lang"];
}
// does this work? is a mutable dictionary a subclass of dictionary?
return dictionary;
}
答案 0 :(得分:1)
看起来有点像你试图逐行翻译Java代码,除了令人头疼之外不会导致任何问题。我想指出的一些事情:
id
(不是超类)。self
之外什么都不做的初始化方法不需要实现,这是因为如果没有为类提供init
方法,它将直接调用超类{{1} 1}}方法。init
方法的内存管理错误。您将通过一个方法返回您拥有的对象,该方法的名称不包含返回值的所有权。而是使用proxyForJson
创建字典,因为此方法的结果没有所有者。[NSMutableDictionary dictionary]
为您的类的实例变量,该变量是通过lang
方法的参数设置的,例如init
。当然,这将更接近您的Java实现。initWithLanguageID:
个对象的简单静态数组,每个NSString
的一个条目对应一个枚举。更好的是,不要使用枚举并允许调用者将语言指定为字符串。从我所看到的,枚举似乎没有任何其他用途,只是将整数映射到字符串。