在目标c中调用函数时传递参数

时间:2014-01-15 06:48:59

标签: ios objective-c

我处于暴露于Objective-c的早期阶段。我有一个问题是,通过这样的一个函数调用,参数将被传递为。

time_call = [[NSDate date] timeIntervalSince1970];
[Services get_time:self :@selector(callBackTime:)];

这是一个名为

的函数
-(void) callBackTime:(NSString *)result 
{
    NSLog(@"result: %@", result);
}

我不理解传递给函数类型的结果参数,就像其他所谓的

一样

我为没有明确陈述问题而道歉。 但这是Class Service中的原始功能

+(void) get_time:(id)delegate :(SEL)selector
{
    NSLog(@"get time call"); 
}

4 个答案:

答案 0 :(得分:1)

如果要将方法发送到对象。你需要两个对象,一个是对象(接收者),另一个是选择器,描述消息是什么。如果选择器有,那么你可能需要参数。

这里:

time_call = [[NSDate date] timeIntervalSince1970];
[Services get_time:self :@selector(callBackTime:)];

+(void) get_time:(id)delegate :(SEL)selector {
    NSLog(@"get time call"); 
}

委托是自我(接收者),选择者是@selector(callBackTime:)。所以在get_time中它可以像这样向委托发送消息:

[delegate performSelector:selector withObject:result] ;

答案 1 :(得分:1)

如果您询问如何从类Services传递对象,也许您可​​以尝试这样的事情:

-(void)callBackTime:(NSString *)result{
    NSLog(@">> %@",result);
}

+(void) get_time:(id)delegate :(SEL)selector {
    if([delegate respondsToSelector:selector]){
        //pass the object here using the selector you have
        [delegate performSelector:selector withObject:@"theObject"];
    }
}

答案 2 :(得分:1)

目前还不清楚你不理解什么,我怀疑英语不是你的第一语言 - 这没关系!希望这有助于猜测。

get_time::中的原始Services方法不使用其参数,因此永远不会调用callBackTime:,所以也许这就是为什么你说“不理解结果参数” “ - 没有电话,这个参数显然没有传递任何价值。

考虑get_time::

的替代定义
+(void) get_time:(id)delegate :(SEL)selector
{
    [delegate performSelector:selector withObject:[NSDate date]]; 
}

现在,该方法使用其两个参数来调用传递的对象(selector)上传递的方法(delegate) - 该方法需要一个参数并且提供此参数([NSDate date] - 当前日期和时间,选择方法称为get_time)。

如果您运行此方法,则callBackTime:方法应NSLog()当前日期。

希望这可以帮助您了解result来自哪里 - get_time需要提供它。

HTH

<强>附录

我错过了callBackTime:声明接受NSString *而我的示例传递了NSDate *。由于Objective-C输入错误,代码将起作用,但要正确callBackTime:应该id或我的样本应该通过NSString,例如[[NSDate date] description]会这样做。

答案 3 :(得分:0)

在这里你可以传递像

这样的参数

这就是你正在做的事情

 [Services get_time:self :@selector(callBackTime:)];

这是传递参数

所需要做的
    [Services get_time:self :@selector(callBackTime:yourResultString)];