一、简单说明
跟其他面向对象语言一样,Swift中的方法可以分为2大类:
(1)实例方法(Instance Methods)
在OC中,实例方法以减号(-)开头
(2)类型方法(Type Methods)
在OC中,类型方法以加号(+)开头
二、实例方法
1.什么是实例方法?
实例方法:就是只能用对象实例调用的方法,也可以称为“对象方法”
实例方法的语法跟函数基本一样
2.代码示例:
![复制代码](http://common.cnblogs.com/images/copycode.gif?x-oss-process=image/resize,w_1400/format,webp)
1 class Dog { 2 func run() { 3 println("Dog--->run") 4 } 5 } 6 var d = Dog() 7 d.run()
![复制代码](http://common.cnblogs.com/images/copycode.gif?x-oss-process=image/resize,w_1400/format,webp)
说明:
第2行定义了一个run方法
第7行调用run方法:调用方法也跟调用函数很像,格式是“对象名.方法名(参数)”
三、方法的参数
(1)方法和函数的参数有点区别,默认情况下
方法的第1个参数名仅仅是局部参数名
方法的其他参数名(除第1个参数名以外)既是局部参数名,又是外部参数名
![复制代码](http://common.cnblogs.com/images/copycode.gif?x-oss-process=image/resize,w_1400/format,webp)
1 class Calculator { 2 func sum(num1: Int, num2: Int) -> Int { 3 return num1 + num2 4 } 5 } 6 var c = Calculator() 7 c.sum(10, num2: 20)
![复制代码](http://common.cnblogs.com/images/copycode.gif?x-oss-process=image/resize,w_1400/format,webp)
说明:
num1仅仅是局部参数名,num2既是局部参数名,又是外部参数名
相当于func sum(num1: Int, #num2: Int) -> Int
(2)可以在参数名前面加个下划线 _,去掉默认的外部参数名
![复制代码](http://common.cnblogs.com/images/copycode.gif?x-oss-process=image/resize,w_1400/format,webp)
1 class Calculator { 2 func sum(num1: Int, _ num2: Int) -> Int { 3 return num1 + num2 4 } 5 } 6 var c = Calculator() 7 c.sum(10, 20)
![复制代码](http://common.cnblogs.com/images/copycode.gif?x-oss-process=image/resize,w_1400/format,webp)
说明:num1、num2都仅仅是局部参数名,不是外部参数名
(3)也可以给第1个参数增加外部参数名
![复制代码](http://common.cnblogs.com/images/copycode.gif?x-oss-process=image/resize,w_1400/format,webp)
1 class Calculator { 2 func sum(#num1: Int, num2: Int) -> Int { 3 return num1 + num2 4 } 5 } 6 var c = Calculator() 7 c.sum(num1: 10, num2: 20)
![复制代码](http://common.cnblogs.com/images/copycode.gif?x-oss-process=image/resize,w_1400/format,webp)
说明:num1、num2既是局部参数名,又是外部参数名
四、类型方法
1.什么是类型方法?
被关键字class修饰的方法,也可以称为“类方法”
1 class Calculator { 2 class func sum(num1: Int, num2: Int) -> Int { 3 return num1 + num2 4 } 5 } 6 Calculator.sum(10, num2: 20)
说明:
第2行定义了一个类型方法
类型方法的特点:直接用类调用类型方法,不能用对象调用类型方法
第6行调用类型方法,格式是“类名.方法名(参数)”
注意:类型方法和实例方法的方法名可以一样
![复制代码](http://common.cnblogs.com/images/copycode.gif?x-oss-process=image/resize,w_1400/format,webp)
1 class Calculator { 2 class func sum(num1: Int, num2: Int) -> Int { 3 return num1 + num2 4 } 5 func sum(num1: Int, num2: Int) -> Int { 6 return num1 + num2 7 } 8 } 9 Calculator.sum(10, num2: 20) 10 var c = Calculator() 11 c.sum(10, num2: 20)
![复制代码](http://common.cnblogs.com/images/copycode.gif?x-oss-process=image/resize,w_1400/format,webp)
说明:
第2行定义的类型方法和第5行定义的实例方法:方法名一样
第9行使用类调用类型方法
第11行使用对象调用实例方法
五、self
1.简单说明
在每个方法内部,都有个隐含的属性self,它的作用跟Objective-C中self的用法基本一致
self代表的是什么?谁调用这个方法,self就代表谁
(1)在实例方法中:self代表调用方法的某个对象
(2)在类型方法中:self代表调用方法的某个类
2.代码示例
![复制代码](http://common.cnblogs.com/images/copycode.gif?x-oss-process=image/resize,w_1400/format,webp)
1 class Person { 2 class func run() { 3 println("class func run") 4 } 5 func run() { 6 println("func run") 7 } 8 class func test() { 9 self.run(); 10 } 11 func test() { 12 self.run(); 13 } 14 } 15 var p = Person() 16 p.test() 17 Person.test()
![复制代码](http://common.cnblogs.com/images/copycode.gif?x-oss-process=image/resize,w_1400/format,webp)
程序的输出结果是:
func run
class func run