如何使用null初始化方法参数

时间:2011-10-26 20:01:54

标签: iphone ios methods

我有一个接受两个参数的自定义方法。我使用这个方法有几个不同的数据集,其中一些只需要传递一个数组和另外两个..我想知道是否可以传递一个null如果需要?

//方法

- (IBAction)startSortingTheArray:(NSArray *)arrayData:(NSArray *)arrayDataB
{
//..
}

3 个答案:

答案 0 :(得分:1)

是的,你可以这样做。然后在你的startSortingTheArray处理这种情况......(即代码的方式,你不要假设arrayDataarrayDataB都存在。)

我想提出的另一个建议是参数是否过多而且你有这种情况,一些参数存在&有些不是。然后使用1个对象作为参数。这个对象是封装的&所有数据点都是此对象的属性。这样你的代码就很清楚了。更干净,容易维持,等等...

答案 1 :(得分:1)

是的,如果需要,您应该能够传递一个null,只要您的实现被编码为期望它。例如:

- (void)startSortingTheArray:(NSArray *)arrayData arrayB:(NSArray *)arrayDataB
{
    if (arrayData != nil) {
        // process arrayData
    }
    if (arrayDataB != nil) {
        // process arrayDataB
    }
}

为了使您的界面更加干净,您还可以提供该方法的替代签名,并执行以下操作:

- (void)startSortingTheArray:(NSArray *)arrayData
{
    [self startSortingTheArray:arrayData arrayB:nil];
}

请注意,我更改了您最初发布的返回类型。您已将其声明为IBAction,它应将发送方作为其参数,而不是传递它的数组。我假设您的意思是将其应用于另一个函数,而不是真正应用于接口构建器操作。

答案 2 :(得分:0)

如果您在界面构建器中使用此方法,例如将其附加到UIButton,则无法实现。

但如果您在其他方法中调用此方法,那么是

[self startSortingTheArray:nil arrayB:nil];

- (IBAction)startSortingTheArray:(NSArray *)arrayData:(NSArray *)arrayDataB
{
if(arrayData == nil){
// do something
}
if(arrayDataB == nil){
// do something
}
if(arryaData == nil && arrayData == nil){
// do something
}

// .. }