【发布时间】:2011-10-26 20:01:54
【问题描述】:
我有一个接受两个参数的自定义方法。我正在将此方法与几个不同的数据集一起使用,其中一些只需要传递一个数组,而另一些只需要传递两个.. 我想知道是否可以在需要时传递一个 null?
//方法
- (IBAction)startSortingTheArray:(NSArray *)arrayData:(NSArray *)arrayDataB
{
//..
}
【问题讨论】:
我有一个接受两个参数的自定义方法。我正在将此方法与几个不同的数据集一起使用,其中一些只需要传递一个数组,而另一些只需要传递两个.. 我想知道是否可以在需要时传递一个 null?
//方法
- (IBAction)startSortingTheArray:(NSArray *)arrayData:(NSArray *)arrayDataB
{
//..
}
【问题讨论】:
是的,如果需要,您应该能够传递一个 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,它应该将 sender 作为其参数,而不是您传递它时的数组。我假设您的意思是将其应用于另一个函数,而不是真正应用于界面构建器操作。
【讨论】:
是的,你可以这样做。然后在您的startSortingTheArray 中处理此类情况...(即,以您不假设arrayData 和arrayDataB 都存在的方式编写代码)。
我想提出的另一个建议是,如果参数过多并且您会遇到一些参数存在而一些不存在的情况。然后使用 1 个对象作为参数。该对象被封装,所有数据点都是该对象的属性。这样你的代码就更清晰、更干净、易于维护等等等等……
【讨论】:
如果您在界面构建器中使用此方法,例如将其附加到 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
}
//.. }
【讨论】: