我有一个接受两个参数的自定义方法。我使用这个方法有几个不同的数据集,其中一些只需要传递一个数组和另外两个..我想知道是否可以传递一个null如果需要?
//方法
- (IBAction)startSortingTheArray:(NSArray *)arrayData:(NSArray *)arrayDataB
{
//..
}
答案 0 :(得分:1)
是的,你可以这样做。然后在你的startSortingTheArray
处理这种情况......(即代码的方式,你不要假设arrayData
和arrayDataB
都存在。)
我想提出的另一个建议是参数是否过多而且你有这种情况,一些参数存在&有些不是。然后使用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
}
// .. }