iOS入门小知识-Swift内外参数名

形参和实参

以OC为例,在方法的声明中,有不带参的,也有带参的,在调用带参方法的时候,参数可分为形参和实参,形参好比给参数起的一个名字,也叫参数名,形参在方法的声明中是没有值的,而实参则是带有具体值和默认值的。

/**
 *  @brief  求两个数的和
 *  @pragma  num1 形参1(第一个数)
 *  @pragma  num2 形参2(第二个数)
 *  @return  返回num1求和num2的结果
 */
int sum(int num1, int num2) {
    return num1 + num2;
}
/*
* 变量a,可作实参
* 变量b,可作实参
*/
int a, b;

实参的值可以是常量,可以是表达式,也可以是函数等。

int a = 1, b = 2;
int result = sum(a, b);//将变量作为实参
result = sum(6, 60);//将常量作为实参
result = sum(a+1, b*2);//将表达式作为实参
result = sum(ceilf(3.5), floorf(2.9));//将函数作为实参

在调用方法时,实参必须要是有值的,以便将值传递给形参,但形参的值不能逆向传给实参,换句话说,实参与形参值的传递是单向的,形参作用域只在方法内部有效,不能在方法外使用,所以形参值的改变并不能影响实参的值。

int sum(int num1, int num2) {
    NSLog(@"%@ = %d",S(num1),num1);
    num1 = num1 + num2;//形参num1的值在方法内部发生了变化
    NSLog(@"%@ = %d",S(num1),num1);
    return num1;
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        int a = 1,//a初始值为1
        b = 2;
        sum(a, b);//实参a传值给形参num1,实参b传值给形参num2
        NSLog(@"%@ = %d",S(a),a);
    }
    return 0;
}
~
运行结果打印:
num1 = 1
num1 = 3
a = 1

另外形参和实参是可以同名的,但是两者之前相互独立,互不影响,因为形参只在方法内部才是有效的。我们只要修改上述代码,就可以让形参和实参同名。

/**
sum(<#int num1#>, <#int num2#>)
*/
int num1 = 1,
num2 = 2;
sum(num1, num2);
~
运行结果打印:
num1 = 1
num1 = 3

Swift函数内外参数名

swift在调用函数时形参和实参就不多说,但在定义函数时参数名分为内部参数名和外部参数名。
不难理解,内部参数名就是给函数内部使用的参数起的名字,而外部参数名就是供函数使用者做参数理解参考给参数起的名字。

//根据长宽求几何图形的面积
func area(width w : Float, height h : Float) -> Float {
    //
    /*
     外部函数名主要是用于给使用者一个理解参考,比如函数参数的基本含义,可能的用途
     这里是一个求面积的函数,width和height对于使用着来说,很容易理解这里的width就是几何图形的长,height就是几何图形的宽,长x宽=面积
     w和h作为内部参数名,其实准确的说是用来存储值的,好比上述说到的形参,并且函数内部不能使用外部参数名,但有一种情况除外,就是内外参数同名时
     */
    let value : Float = w * h
    return value
}
在OC方法实现中调用swift的area函数是这样子的:
[swiftVC areaWithWidth:<#(CGFloat)#> height:<#(CGFloat)#>]

同样也可以不添加外部参数名,只需要用下划线"_"来表示外部参数名,这样在调用函数时就不需要再把外部参数名写出来。

//根据长宽求几何图形的面积
func area(_ w : Float, height h : Float) -> Float {
    let value : Float = w * h
    return value
}
area(100, height: 200)

但是并不建议这样做,因为它会降低代码的可读性,尤其对OC来说,这会造成极大的阅读困难。比如当你将area函数改成这样时

func area(_ w : Float, _ h : Float) -> Float {
    let value : Float = w * h
    return value
}

在OC中检索area函数是这样的
函数检索是这样子的

在OC中调用area函数是这样的

[swiftVC area:100 :200];

如果参数再多点,估计就真的睁眼瞎了,肯定也会抓狂。另外更值得注意的是,外部参数名和内部参数名不能同时“消失”,否则可能都没法往下继续将代码写下去,甚至影响功能的开发。
比如这样,func area(_ : CGFloat, _ : CGFloat) -> CGFloat首先这是一个没有任何语法错误的函数定义,当然肯定是可以运行的,但是再看看函数体内部实现,你会发现传参不见了,根本就影响到了面积的换算过程,功能写不下去了,因为拿不到相关的参数值,只能return一个心之所想的面积值。

func area(_  : CGFloat, _ :  CGFloat) -> CGFloat {
        return 100
    }

最后还有一种特殊情况,就像上述中实参和形参同名类似,函数的参数可以内外参数同名。所谓同名就如func area(width width : CGFloat, height height : CGFloat) -> CGFloat这样的写法,当然还有一种写法,可能很多都没见过func area(#width : CGFloat, #height : CGFloat) -> CGFloat,遗憾的是这两种写法在最新的Swift中都是错误的写法,用不了!大概可以在swift的标准库里些许能找到点蛛丝马迹。
现在很简单了,只需要开发者写一个名字就行,可以理解为省掉了内部参数名,只编写外部参数名就完事了。

func area(width : CGFloat, height : CGFloat) -> CGFloat {
        return 100
    }

在swift环境下调用函数是这样子的

area(width: 100, height: 200)

在OC环境下调用方法是这样子的

//OC重新做了方法的映射
[swiftVC areaWithWidth:100 height:200];
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容