gpt4 book ai didi

objective-c - 声明和调用内部方法时出现问题

转载 作者:行者123 更新时间:2023-12-03 17:25:53 25 4
gpt4 key购买 nike

如何在普通方法中声明和使用小型辅助函数?

在我的 Objective-C 方法中,我需要一个函数来查找字符串中的项目

-(void) Onlookjson:(id) sender{
NSString * res = [[sender gstring] copy];
persInfoBirth.text = getKeyValue(res, @"Birth");
}

我为辅助函数 getKeyvalue 提出了一个普通的 C 类型声明,如下所示

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=@"{ 出生 = "1910"; 死亡 = "1936"; }";

无论如何,对于辅助函数中前两行中的任何一行,我都会收到异常“无法识别的选择器发送到实例”

如何声明仅在内部使用的辅助函数以及如何安全地调用它们?

问候

马丁

最佳答案

这是真正的代码吗?您从编译器得到的错误和警告为零吗?您不能忽略编译器警告,除了标准警告之外,您还应该打开静态分析器。

上面的代码有很多问题,其中大部分与声明和调用方法无关。上面的代码无法编译,所以可能粘贴不正确或者其他什么..

无论如何..声明和使用方法。为什么使用c函数?除非你有充分的理由为什么不使用 Objective-c ?如果您确实有充分的理由使用 C 函数,那么您的定义应该是:-

NSString *getKeyvalue( NSString *s, NSString *key ){
...
}

注意参数。由于 NSString 实例驻留在堆中(而不是堆栈上),因此您总是希望将指针传递给它们。

然后您需要将声明放入头文件中:-

NSString *getKeyvalue( NSString *s, NSString *key )

编辑:

在 Objective-c 中,普通方法辅助方法之间没有区别,只有一种,而且你已经写了一种

- (void)onLookJson:(id)sender { .. }

把它拆开..

  1. 所有方法均以+或-开头,表示类方法实例方法。由于您熟悉 C++,我想您知道这意味着什么。

  2. (void) 是返回类型。即该方法不返回值。如果确实如此,它可能看起来像 (float) 或 (NSString *) 或 (id)。

  3. onLookJson:是方法名称,该方法采用 1 个参数。请注意,“:”实际上是名称的一部分。这个方法在任何情况下都不是“onLookJson”。参数必须始终跟在 : 后面,因此不接受任何参数的方法一定不能有参数。

例如

- (NSString *)fullName { .. }

这是一个实例方法,例如 Person 类的实例方法,您可以这样调用它:-

NSString *theName = [aPerson fullName];

所以

  • 不带任何参数的方法名称参数就像“说话”

  • 一个方法需要 1 个参数的名称就像'说话:'

  • 一个方法名称,需要 2参数类似于“speakTo: language:”

  • 方法名称,取3参数类似于“speakTo:语言:音量:”

等等

剩下的就是输入参数类型和名称。您的函数定义:

NSString *getKeyvalue( NSString *s, NSString *key ){

会变成..

- (NSString *)getValue:(NSString *)s key:(NSString *)key { .. }

同样,您需要在 header 中声明它,否则您将收到编译器警告。

- (NSString *)getValue:(NSString *)s key:(NSString *)key;

关于objective-c - 声明和调用内部方法时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5010703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com