中缀语法是OC里特有的一种,就是在函数的参数前面加一个解释词,让调用的时候明白该参数的含义
比如:
-(void)processDataWithparamaA:(NSString *)paramaA paramaB:(NSString *)paramaB{ }
调用的时候:
[self processDataWithparamaA:@"A" paramaB:@"B"];
不过你发现没,这中缀语法的前提是你必须在函数名的最前面,写个With啥的说明第一个参数的名字,否则第一个参数是没有中缀的。
这样写,确实让调用的时候看起来非常顺眼,[xxxxxxWithparamaA:@"A" paramaB:@"B"] 参数看起来好像非常一致啊,好评。
那我们再回到swift,假如我们这样声明一个函数
func processData2(paramaA:String,paramaB:String){}
但是他的调用竟然学OC的中缀,省略了第一个参数,那谁来告诉我第一个参数啥意思?。。
processData2("a", paramaB: "b")
作为一个强迫症,我不能忍啊
如果开发这个语言的是为了让我们适应OC的函数命名习惯(就是函数名里要加个Withxxx,xxx是第一个参数的中缀)
那我就必须这样声明:
func processData2WithparamaA(paramaA:String,paramaB:String){}
卧槽,这是什么鬼!!。。
然后调用呢?。。。尼玛,在括号外面了有木有。。。里面的paramaA简直毫无存在感啊
processData2WithparamaA("a", paramaB: "b")
OC调用函数是这样的 [self processDataWithparamaA:@"A" paramaB:@"B"]
两边是中括号啊
这种优雅你Swift的小括号学不来的啊。。
好在,开发Swift的那位Chris Lattner仁兄,又想到某些开发者不喜欢调用的时候带什么鸡毛中缀,于是想粗了加一个下划线来省略中缀的方法:
func processData3(paramaA:String,_ paramaB:String){}
这样,调用的时候就再也不需要写参数了,妈妈再也不担心我范强迫症了:
processData3("a", "b")
然后,夷?哪里好像不对劲? 。。第一个paramaA居然变得可有可无了(其实一直以来都是可有可无的),意思是说,完全可以这样写
func processData3(_ paramaA:String,_ paramaB:String){}
编译是能通过,但是编译器会提示你,这种写法是不规范的。
这又是何必啊。。。
给我留条生路啊。。。
时间: 2024-10-13 06:33:47