Ziank的技术博客

swift函数的一些注意点

学习swift的过程中,简单说一下自己感觉swift和其他语言不太相同的几个注意点。

###1. swift的函数的入参和返回值都可以是一个函数。

1
2
3
4
5
6
func voidFunc() -> Void {
}
func testFunc(Void->Void) -> Void->Void {
return voidFunc
}

###2. swift的函数返回值可以同时返回多个值
swift的函数返回值可以是一个由多个数值组成的元组(tuple),这样就可以同时返回多个数值。

1
2
3
func testFunc(Void->Void) -> (Int, Int) {
return (3, 4)
}

###3. 外部参数名
在swift的函数中,每一个参数都可以有本地参数名和外部参数名两个名称。
本地参数名就是定义函数名时,在参数列表中所写的参数名,它只可以在函数主体内使用;
外部参数名在函数定义时需要写在本地参数名之前,并使用空格将其分开。

1
2
3
func testFunc(outParam inParam:Int) -> Int {
return 0
}

如上述代码中,外部参数名是outParam,本地参数名是inParam,在调用时需要写上外部参数名

1
testFunc(outParam: 123)

###4. 类里面的静态函数
在swift1.0中类里面的静态函数,不能使用static关键字来修饰,而应该使用Class关键字来进行修饰
在swift2.0中,同时支持static和class关键字。

1
2
3
4
class TestClass {
class func testFunc() {
}
}

###5. ViewController和xib文件的对应
除了和OC一样在xib里面设置对应的Class以外,由于swift不会自动调用xib的初始化,所以需要手动添加对应的初始化函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class TestViewController: UIViewController {
convenience override init() {
var nibNameOrNil = String?("TestViewController")
//考虑到xib文件可能不存在或被删,故加入判断
if NSBundle.mainBundle().pathForResource(nibNameOrNil, ofType: "nib") == nil {
nibNameOrNil = nil
}
self.init(nibName: nibNameOrNil, bundle: nil)
}
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}