本篇分为两部分:

一、Swift中的可变参数函数

二、初始化方法的顺序


一、Swift中的可变参数函数

可变参数函数指的是可以接受任意多个参数的函数,在 OC 中,拼接字符串的函数就属于可变参数函数

NSString *name = @"Tom";
NSDate *date = [NSDate date];
NSString *string = [NSString stringWithFormat:
@"Hello %@. Date: %@", name, date];

在 swift 中定义可变参数函数:

func sum(input: Int...) -> Int {
return input.reduce(, combine: +)
}
print("result:\(sum(1,2,3,4,5))")

输出结果:

注意:可变参数只能作为方法中的最后一个参数来使用,而不能先声明一个可变参数,然后再声明其他参数。因为编译器不知道输入的参数应该从哪里截断。另外,在一个方法中,最多只能有一组可变参数。而且传入的可变参数必须是所指定的类型。

  Swift 提供了使用下划线 _ 来作为参数的外部标签,来使调用时不再需要加上参数名字。我们可以利用这个特性,在声明方法时就指定第一个参数为一个字符串,然后跟一个匿名的参数列表,这样在写起来的时候就好像是所有参数都是在同一个参数列表中进行的处理。

比如:进入到 Swift 中, 就会看到 NSString 格式化的声明就是这样处理的:

extension NSString {
convenience init(format: NSString, _ args: CVarArgType...) {
self.init()
}
//...
}

调用的时候就和在 OC 时几乎一样了,非常方便:

let name = "Tom"
let date = NSDate()
let string = NSString(format: "Hello %@. Date: %@", name, date)

二、初始化方法的顺序

  让我们在 Swift 开发中最不习惯的问题之一可能就包含 Swift 的初始化方法需要保证类型的所有属性都被初始化,所以初始化方法的调用顺序就很有讲究。我们在保证当前子类实例的成员初始化完成后才能调用父类的初始化方法:

class Animal {
var name: String?
init() {
name = "Animal"
}
}
let animal = Animal()
print(animal.name)
class Dog: Animal {
let age: Int
override init() {
age =
// 如果不先把子类的成员初始化完成,下面就无法调用父类的初始化方法会报错,Swift 会自动的对父类的对应 init 方法进行调用,如果不需要改变父类属性的话,可以不写
super.init() // Property 'self.age' not initialized at super.init call
name = "a dog" // 根据实际情况修改
}
}
print(Dog().name)

综上,子类的初始化顺序是:

1.设置子类自己需要初始化的参数,age = 10 (是条老狗了)

2.调用父类的相应的初始化方法, super.init()       (Swift 会自动的对父类的对应 init 方法进行调用,可以不写)

3.对父类中需要改变的成员进行设定, name = "a dog"  (根据实际情况修改)

Swift开发第十篇——可变参数函数&初始化方法顺序的更多相关文章

  1. ios开发-Object-C可变参数函数

    简介 一个可变参数函数是指一个函数拥有不定的参数,即为一个函数可接收多个参数.有时我们会遇到一些算术问题需要用到,比如是计算传入参数的总和,字符串的连接或是其它操作过程,我们在 OC 里也经常使用,最 ...

  2. C语言可变参数函数的编写

    1. 引言 C语言我们接触的第一个库函数是 printf(“hello,world!”);其参数个数为1个. 然后,我们会接触到诸如: printf(“a=%d,b=%s,c=%c”,a,b,c);此 ...

  3. C语言学习020:可变参数函数

    顾名思义,可变参数函数就是参数数量可变的函数,即函数的参数数量是不确定的,比如方法getnumbertotal()我们即可以传递一个参数,也可以传递5个.6个参数 #include <stdio ...

  4. C语言中可变参数函数实现原理

    C函数调用的栈结构 可变参数函数的实现与函数调用的栈结构密切相关,正常情况下C的函数参数入栈规则为__stdcall, 它是从右到左的,即函数中的最右边的参数最先入栈.例如,对于函数: void fu ...

  5. C可变参数函数 实现

    转自:http://blog.csdn.net/weiwangchao_/article/details/4857567 C函数要在程序中用到以下这些宏: void va_start( va_list ...

  6. C语言可变参数函数实现原理

    一.可变参数函数实现原理 C函数调用的栈结构: 可变参数函数的实现与函数调用的栈结构密切相关,正常情况下C的函数参数入栈规则为__stdcall, 它是从右到左的,即函数中的最右边的参数最先入栈. 本 ...

  7. c可变参数函数

    C函数要在程序中用到以下这些宏: <pre lang="c" escaped="true">void va_start( va_list arg_p ...

  8. 【转】C/C++中可变参数函数的实现

    转自:http://www.cnblogs.com/cylee025/archive/2011/05/23/2054792.html 在C语言的stdarg.h头文件中提供了三个函数va_start, ...

  9. PHP中的可变参数函数和可选参数函数

    1)可选参数函数.例如: <?phpfunction add($var1,$var2,$var3=0,$var4=0){ return$var1+$var2+$var3+$var4;}echo ...

随机推荐

  1. Matrix Admin 后台模板笔记

    一个后台模板用久了就想换一个.上次找到了Matrix Admin.和ACE一样都是Bootstrap风格,比较容易上手.Matrix要更健壮些.感觉拿去做用户界面也是可以的. 整体风格: 1.表单验证 ...

  2. phpcms 完美实现 导航栏当前栏目高亮

    我们在用phpcms做网站的时候,经常碰到导航栏高亮功能,或者侧栏高亮,这个会涉及到几个问题: .栏目列表页子栏目高亮判断,如果当前页面为子栏目,他的顶级栏目如果在导航栏也要高亮. .内容页高亮,这个 ...

  3. Super Jumping! Jumping! Jumping!——E

    E. Super Jumping! Jumping! Jumping! Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO forma ...

  4. centos 安装git server

    1.yum install lrzsz wget git 2.安装gitosis:gitosis为Git用户权限管理系统,通过管理服务端的/home/git/.ssh/authorized_key文件 ...

  5. JS之正则表达式验证URL

    function IsURL(str_url){ var strRegex = "^((https|http|ftp|rtsp|mms)?://)" + "?(([0-9 ...

  6. Data Guard配置后续检查

    Data Guard配置后续检查 1.打开生产端节点192.166.1.190上的数据库实例: SQL>startup; 2.打开容灾端节点192.166.1.60上的数据库实例: SQL> ...

  7. Zepto,Zepto API 中文版,Zepto 中文手册,Zepto API,Zepto API 中文版,Zepto 中文手册,Zepto API 1.0, Zepto API 1.0 中文版,Zepto 1.0 中文手册,Zepto 1.0 API-translate by yaotaiyang

    Zepto,Zepto API 中文版,Zepto 中文手册,Zepto API,Zepto API 中文版,Zepto 中文手册,Zepto API 1.0, Zepto API 1.0 中文版,Z ...

  8. 全面解释java中StringBuilder、StringBuffer、String类之间的关系

    StringBuilder.StringBuffer.String类之间的关系 java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,在上一篇博文中我 ...

  9. [ZYNQ-7]PS处理PL外部中断的简单实例的剖析 (参考米联miz702n)

    Zynq的ARM通过GIC中断控制器来接收核仲裁所有的中断.由于中断向量表只有4Bytes大小,仅仅正好存放一条跳转语句,因此当产生一个外部中断时,中断处理的大致过程:PC内容保存到LR_IRQ用于中 ...

  10. css中单位px和em,rem的区别[转载]

    PX特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位: 3. Firefox能够调整px和em,rem,但是96%以上 ...