Swift语法专题十二——方法

Swift讲解专题十二——方法

一、引言

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

二、实例方法基础

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

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

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

class Math {
    //完成加法功能的实例方法
    func add(param1:Double,param2:Double)->Double{
        return param1+param2
    }
    func mul(param1:Double,param2:Double) -> Double {
        //使用self调用实例方法
        self.add(param1, param2: param2)
        return param1*param2
    }
}

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

class Math {
    //完成加法功能的实例方法
    func add(param1:Double,param2:Double)->Double{
        return param1+param2
    }
    func mul(param1:Double,param2:Double) -> Double {
        //使用self调用实例方法
        add(param1, param2: param2)
        return param1*param2
    }
}

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

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

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

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

struct Point {
    var x:Double
    var y:Double
    mutating func move(x:Double,y:Double) {
        self.x+=x
        self.y+=y
    }
}
var point = Point(x: 1, y: 1)
print(point)
point.move(3, y: 3)
print(point)

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

struct Point {
    var x:Double
    var y:Double
    mutating func move(x:Double,y:Double) {
        self = Point(x: self.x+x,y: self.y+y)
    }
}

四、类型方法

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

struct Point {
    var x:Double
    var y:Double
    mutating func move(x:Double,y:Double) {
        self = Point(x: self.x+x,y: self.y+y)
    }
    static func name(){
        print("Point")
    }
}
Point.name()

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

class Math {
    var param1 = 10.0
    //完成加法功能的实例方法
    func add(param1:Double,param2:Double)->Double{
        //这里将使用param1=10,如果不加self 将使用参数中的param1
        return self.param1+param2
    }
    func mul(param1:Double,param2:Double) -> Double {
        //使用self调用实例方法
        add(param1, param2: param2)
        return param1*param2
    }
    class func name(){
        print("Math")
    }
}
Math.name()
时间: 2024-12-03 22:18:53

Swift语法专题十二——方法的相关文章

Swift语法专题十——类和结构体

Swift讲解专题十--类与结构体 一.引言         Swift中的类与结构体十分相似,和Objective-C不同的是,Swift中的结构体不仅可以定义属性,也可以像类一样为其定义方法.         Swift中的类与结构体有如下相似点: 1.定义属性来存储值. 2.定义函数来提供功能. 3.通过定义下标语法使用下标的方式取值. 4.定义构造方法来对其进行初始化. 5.通过扩展来在原始基础上添加功能. 6.通过协议来定义实现标准. 当然类和结构体也有许多不同点,下面这些功能是类独有

Swift语法专题二——基本数据类型

Swift解读专题二--基本类型 一.常量和变量         Swift语言的常量和变量在使用之前,必须被定义.常量用于处理程序中只在初始化时设置的量值,之后不能进行赋值改变,变量用于处理程序中可以进行改变的量值.分别用let和var来声明常量和变量,示例如下: var varValue = 1 let letValue = 10 Swift语法也支持在一行中声明多个量值,示例如下: var a=1,b=2.9,c="string" 在声明量值时,编译器会根据第一次赋值的类型来推断

Swift语法专题八——闭包

Swift讲解专题八--闭包 一.引言         Swift中的闭包是有一定功能的代码块,这十分类似于Objective-C中的block语法.Swift中的闭包语法风格十分简洁,其作用和函数的作用相似. 二.从一个系统函数看闭包         Swift标准函数库中提供了一个sort排序函数,对于已经元素类型的数组,调用sort函数会进行重新排序并返回新的排序后的数组.这个sort函数可以接收一个返回值为Bool类型的闭包,来确定第一个元素是否排在第二个元素前面.代码示例如下: var

Swift语法专题四——字符串与字符

Swift解读专题四--字符串与字符 一.引言         Swift中提供了String类型与Characters类型来处理字符串和字符数据,Swift中的String类型除了提供了许多方便开发者使用的方法外,还可以与Foundation框架的NSString类进行转换,使用起来十分方便. 二.String基础         在Swift中,使用双引号来定义字符串,开发者可以通过如下代码来创建一个字符串常量: let str = "Hello, playground" 可以通过

Swift语法专题五——集合类型

Swift讲解专题五--集合类型 一.引言         Swift中提供了3种集合类型,Array数据类型,Set集合类型,Dictionary字典类型.Array用于存放一组有序的数据,数据角标从0开始一次递增:Set用于存放一组无序的数据,数据不可以重复:Dictionary也用于存放一组无序的数据,只是其是按照键值对的方式存储,键值必须唯一.这里借用官方文档中的一张图来表示3种集合类型的特点: 二.Array类型         Array通常也被称为数组,Swift是一种类型安全语言

Swift语法专题六——流程控制

Swift讲解专题六--流程控制 一.引言         一种编程语言的强大与否,很大程度上取决于其提供的程序流程控制方案,就如使用汇编语言实现复杂的程序流程是一件痛苦的事情.Swift中提供了许多强大的流程控制语句,例如快速遍历for-in,while循环,repeat-while循环,switch选择等,需要注意的是,在Swift2.2中,for(a;b;c)循环已经被弃用掉,并且Swift中的Switch语句也更加强大,可以处理任意数据类型. 二.for-in循环         配合范

Swift语法专题七——函数

Swift讲解专题七--函数 一.引言         函数是有特定功能的代码段,函数会有一个特定的名称调用时来使用.Swift提供了十分灵活的方式来创建与调用函数.事实上在Swift,每个函数都是一种类型,这种类型由参数和返回值来决定.Swift和Objective-C的一大区别就在于Swift中的函数可以进行嵌套. 二.函数的创建与调用         函数通过函数名,参数和返回值来定义,参数和返回值决定一个函数的类型,在调用函数时,使用函数名来进行调用,示例如下: //传入一个名字 打印并

Swift语法专题九——枚举

Swift讲解专题九--枚举 一.引言         在Objective-C语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以是字符,字符串,整型或者浮点型数据. 二.枚举语法         Swift中enum关键字来进行枚举的创建,使用case来创建每一个枚举值,示例如下: //创建姓氏枚举,和Objective-C不同,Swift枚举不会默认分配值 enum Surname { case 张 cas

Swift语法专题三——基础运算符

Swift解读专题三--基础运算符 一.引言          运算符是编程语言不可缺少的一个部分,Swift中除了支持C中的运算符外,还提供了一些更加强大的运算符功能,例如取余符%可以用来计算浮点数,另外新增了两种范围运算符.Swift中有3类运算符: 1.一元运算符 运算符作用于一个操作数,可以出现在操作数前或者操作数后. 2.二元运算符 运算符作用于两个操作数,出现在两个操作数中间. 3.三元运算符 运算符作用于三个操作数间. 二.赋值运算符         赋值运算符用=符号表示,用于初