如何在常规方法中声明和使用小辅助函数?
在我的objective-c方法中,我需要一个函数来查找字符串
中的项目-(void) Onlookjson:(id) sender{
NSString * res = [[sender gstring] copy];
persInfoBirth.text = getKeyValue(res, @"Birth");
}
我想出了一个正常的C类型声明,用于辅助函数getKeyvalue,就像这样
NSString * getKeyvalue(NSString * s, NSString * key){
NSString *trm = [[s substringFromIndex:2] substringToIndex:[s length]-3];
NSArray *list = [trm componentsSeparatedByString:@";"];
//....
NSString res;
res = [list objectAtIndex:1];
//...
return res;
}
s:
中的输入字符串示例s = @“{Birth =”1910“; Death =”1936“;}”;
无论如何,对于辅助函数中的两个第一行中的任何一行,我得到一个异常“无法识别的选择器发送到实例”
如何声明仅在内部使用的辅助函数以及如何安全地调用它们?
问候
马丁
答案 0 :(得分:0)
这是真正的代码吗?你从编译器得到零错误和警告吗?您不能忽略编译器警告,除标准警告外,还应打开静态分析器。
上面的代码有很多问题,其中大部分内容都与声明和调用方法无关。以上代码无法编译,因此可能粘贴错误或其他东西..
无论如何..声明和使用方法。为什么使用c函数?除非你有充分的理由不使用Objective-c?如果你有充分的理由使用C函数,你的定义应该是: -
NSString *getKeyvalue( NSString *s, NSString *key ){
...
}
请注意参数。由于NSString实例驻留在堆中(不在堆栈中),因此您总是希望将指针传递给它们。
然后,您需要将声明放在头文件中: -
NSString *getKeyvalue( NSString *s, NSString *key )
修改强>:
在Objective-c中,普通方法和辅助方法之间没有区别,只有一种,你有一个写了一个
- (void)onLookJson:(id)sender { .. }
把它拆开..
所有方法均以+或 - 开头,表示类方法或实例方法。由于您熟悉C ++,我猜你知道这意味着什么。
(void)是返回类型。即此方法不返回值。如果它确实如此(浮动)或(NSString *)或(id)。
onLookJson:是方法名称,方法接受1个参数。请注意,':'实际上是名称的一部分。这种方法绝不是'onLookJson'的任何情况。参数必须始终遵循:,因此不带任何参数的方法必须没有参数。
实施例
- (NSString *)fullName { .. }
这是一个实例方法,例如Person Class,您可以将其称为: -
NSString *theName = [aPerson fullName];
所以
一个不需要的方法名称 参数就像'发言'
一种方法 带有1个参数的名称就像 'speakTo:'
一个取2的方法名称 参数就像'speakTo:language:'
一个需要3的方法名称 参数就像'speakTo:language:volume:'
等
剩下的就是输入参数类型和名称。 你的功能定义:
NSString *getKeyvalue( NSString *s, NSString *key ){
会变成......
- (NSString *)getValue:(NSString *)s key:(NSString *)key { .. }
再次,您需要在标题中声明它,否则您将收到编译器警告。
- (NSString *)getValue:(NSString *)s key:(NSString *)key;