考虑下面的原型,这是一个常见的原型,
-(void)writeData:(NSData *)data length:(NSInteger *)len;
我知道这种方法的每个部分的含义。我的问题是,“长度”,第二个参数的名称是否是可选的?编译器是否会编译以下内容:
-(void)writeData:(NSData *)data :(NSInteger *)len;
*编辑: *感谢您的所有回复:)
考虑下面的原型,这是一个常见的原型,
-(void)writeData:(NSData *)data length:(NSInteger *)len;
我知道这种方法的每个部分的含义。我的问题是,“长度”,第二个参数的名称是否是可选的?编译器是否会编译以下内容:
-(void)writeData:(NSData *)data :(NSInteger *)len;
*编辑: *感谢您的所有回复:)
如果您遗漏了第二个参数的名称标签,编译器不会抱怨(自己尝试一下,看看它是否有效)。
但是,在定义它的方法调用中它不是可选的。例如,您不能在length
省略部分方法名称的情况下调用第一个方法。
另请注意,在为第二种方法制作选择器时,冒号不是可选的:
SEL(writeData::)
它会,但它被认为是不好的风格 - 基本上你违反了 Objective-C 命名约定。
第一种方法命名writeData:length:
,第二种方法writeData::
首先,(NSInteger *)
不好,因为NSInteger
是原始类型。所以你必须只使用NSInteger
.
此外,您的第二个syntax
对于编译器来说是正确的,但对于人类来说是错误的。
-(void)writeData:(NSData *)data :(NSInteger *)len;
是一个有效的objective-c方法(从编译器的角度来看它是不同writeData:length:
的),但是命名所有方法参数会使代码更具可读性和更容易理解,所以你的第一个例子更可取
第二个是有效的,但未使用且描述性较差。在第一种情况下,方法名称是writeData:length:
,我的意思是,“长度:”是方法名称的一部分。第二个方法名称是writeData::
. 我从未见过在 ObjC 中使用“匿名”参数……事实上,这是我最喜欢该语言的东西之一。