博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift语法专题十二——方法
阅读量:5740 次
发布时间:2019-06-18

本文共 2829 字,大约阅读时间需要 9 分钟。

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()

转载地址:http://hpbzx.baihongyu.com/

你可能感兴趣的文章
原生html怎么使用vue,vue教程(一)-html使用vue
查看>>
android堆内存解析,heapsnap HeapSnap 是一款针对 Android 进程堆内存进行追踪、定位,以便查出泄露位置的工具 @codeKK c开源站...
查看>>
在html标签外写的div,包含div以外的文件,即使HTML代码中的内部标签
查看>>
html文件中top什么意思,margin-top在html中的意思是什么
查看>>
html 报告模板,HttpRunner 实现 Jinja2 自定义报告模板
查看>>
人生与算法
查看>>
软件系统架构师成长之路(一)
查看>>
Cocos2d-x Eclipse下程序运行产生错误Effect initCheck() returned -1
查看>>
oracle命令行格式化输出的几个常用命令
查看>>
Drupal8系列(四):主题制作的前期准备-Ubuntu 14.04 LTS
查看>>
自动化运维与网站安全技术沙龙活动分享
查看>>
第6章核心代码《跟老男孩学习Linux运维:Shell编程实战》
查看>>
思科和华为路由器OSPF之对比学习
查看>>
python运维开发之socket网络编程04
查看>>
6426C Lab2 部署和配置证书服务
查看>>
以"小刀会“的成败论当今创业成败
查看>>
SCOM 2012系列③导入管理包
查看>>
读《做单--成交的秘密》有感
查看>>
shell脚本如何监控程序占用带宽?
查看>>
如何定位cpu占用率高的java线程?
查看>>