Swift讲解专题十二——方法

Swift讲解专题十二——方法

一、引言

        方法只是一个术语,其实就是将函数与特定的类型结合,类、结构体、枚举都可以定义方法,方法又分为实例方法和类型方法,类型方法类似于Objective-C中的类方法。Swift和Objective-C的一大不同是,Objective-C只有在类中可以定义方法。

二、实例方法基础

        实例方法的语法和函数完全一致,其和具体类型的实例所关联,实例方法在调用时由类型的实例点语法进行调用来完成一些功能模块。示例如下:

1class Math { 2 //完成加法功能的实例方法 3 func add(param1:Double,param2:Double)->Double{ 4 return param1+param2 5 } 6} 7//创建类型实例 8var obj = Math() 9//调用方法进行计算 10obj.add(5, param2: 5)

与Objective-C类似,Swift中每一个类的实例中都隐藏含有一个self属性,self属性就是实例本身,开发者可以在实例方法中使用self来调用属性或者其他实例方法,示例如下:

1class Math { 2 //完成加法功能的实例方法 3 func add(param1:Double,param2:Double)->Double{ 4 return param1+param2 5 } 6 func mul(param1:Double,param2:Double) -> Double { 7 //使用self调用实例方法 8 self.add(param1, param2: param2) 9 return param1*param2 10 } 11}

然而,Swift并不要求开发者必须写self,默认情况下,开发者可以直接省略self来调用属性和方法:

1class Math { 2 //完成加法功能的实例方法 3 func add(param1:Double,param2:Double)->Double{ 4 return param1+param2 5 } 6 func mul(param1:Double,param2:Double) -> Double { 7 //使用self调用实例方法 8 add(param1, param2: param2) 9 return param1*param2 10 } 11}

有一种情况需要注意,对于属性的调用,如果方法中的参数名和类实例的属性名相同,则必须使用self来调用类的实例属性,防止歧义的产生:

1class Math { 2 var param1 = 10.0 3 //完成加法功能的实例方法 4 func add(param1:Double,param2:Double)->Double{ 5 //这里将使用param1=10,如果不加self 将使用参数中的param1 6 return self.param1+param2 7 } 8 func mul(param1:Double,param2:Double) -> Double { 9 //使用self调用实例方法 10 add(param1, param2: param2) 11 return param1*param2 12 } 13}

三、在实例方法中修改值类型的值

        首先需要清楚一个概念,Swift中有两种类型,值类型和引用类型,具体在类、结构体、枚举一节中有相关介绍,这里需要注意的是,对于值类型,即结构体和枚举,其并不能直接在实例方法中修改实例属性的值,Swift中提供了另一种方式,如果真有如此的需求,开发者可以使用mutating关键字将实例方法声明成可变的,实际上,如果在可变的实例方法中修改了值类型属性的值,是会创建一个新的实例来代替原来的实例的,示例如下:

1struct Point { 2 var x:Double 3 var y:Double 4 mutating func move(x:Double,y:Double) { 5 self.x+=x 6 self.y+=y 7 } 8} 9var point = Point(x: 1, y: 1) 10print(point) 11point.move(3, y: 3) 12print(point)

在值类型实例的可变方法中修改属性的值,实际上就是创建了一个新的实例,上面的写法和下面的写法原理是一样的:

1struct Point { 2 var x:Double 3 var y:Double 4 mutating func move(x:Double,y:Double) { 5 self = Point(x: self.x+x,y: self.y+y) 6 } 7}

四、类型方法

        正如实例方法是通过类型的实例来进行调用的,类型方法是通过类型直接来调用的,相比于实例方法,类型方法中的self指当前类型,同样开发者可以使用self来区别类型属性和类型方法中的参数。使用Static关键字来进行类型方法的创建:

1struct Point { 2 var x:Double 3 var y:Double 4 mutating func move(x:Double,y:Double) { 5 self = Point(x: self.x+x,y: self.y+y) 6 } 7 static func name(){ 8 print("Point") 9 } 10} 11Point.name()

如果是在类中创建类型方法,若此方法可以被子类进行重写,则应该使用class关键字来创建,示例如下:

1class Math { 2 var param1 = 10.0 3 //完成加法功能的实例方法 4 func add(param1:Double,param2:Double)->Double{ 5 //这里将使用param1=10,如果不加self 将使用参数中的param1 6 return self.param1+param2 7 } 8 func mul(param1:Double,param2:Double) -> Double { 9 //使用self调用实例方法 10 add(param1, param2: param2) 11 return param1*param2 12 } 13 class func name(){ 14 print("Math") 15 } 16} 17Math.name()

专注技术,热爱生活,交流技术,也做朋友。

——珲少 QQ群:203317592

点赞
收藏

评论区

加载中...

相关推荐

Swift讲解专题七——函数

Swift讲解专题七——函数一、引言      函数是有特定功能的代码段,函数会有一个特定的名称调用时来使用。Swift提供了十分灵活的方式来创建与调用函数。事实上在Swift,每个函数都是一种类型,这种类型由参数和返回值来决定。Swift和ObjectiveC的一大区别就在于Swift中的函数可以进行嵌套

Swift专题讲解十九——类型转换

Swift专题讲解十九——类型转换一、类型检查与转换      在ObjectiveC和Java中,任何类型实例都可以通过强转使编译器认为它是另一种类型的实例,这么做其实是将所有的安全检查工作都交给了开发者自己来做。先比之下,Swift中的Optional类型转换就会比较安全与可靠。      

Swift讲解专题九——枚举

Swift讲解专题九——枚举一、引言      在ObjectiveC语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以是字符,字符串,整型或者浮点型数据。二、枚举语法      Swift中enum关

Swift解读专题四——字符串与字符

Swift解读专题四——字符串与字符一、引言      Swift中提供了String类型与Characters类型来处理字符串和字符数据,Swift中的String类型除了提供了许多方便开发者使用的方法外,还可以与Foundation框架的NSString类进行转换,使用起来十分方便。二

Swift中构造方法的解析

Swift中构造方法的解析一、引言     构造方法是一个类创建对象最先也是必须调用的方法,在ObjectiveC中,开发者更习惯称这类方法为初始化方法。在ObjectiveC中的初始化方法与普通函数相比除了要以init抬头外并无太严格的分界,而在Swift语言体系中,构造方法与普通的方法分界十分严格,从格式

Swift专题讲解二十一——协议

Swift专题讲解二十一——协议一、引言      协议约定了一些属性与方法,其作用类似Java中的抽象类,Swift中类型通过遵守协议来实现一些约定的属性和方法。Swift中的协议使用protocol关键字来声明。Swift中的协议还有一个十分有意思的特性,协议可以通过扩展来实现一些方法和附加功能。