开发者社区> 珲少> 正文

Swift语法专题十二——方法

简介: 方法在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()

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Swift实用小册11: Subscript下标语法的使用
Swift实用小册11: Subscript下标语法的使用
125 0
swift语法的基本介绍(常量和变量)
swift语法的基本介绍(常量和变量)
54 0
swift语法的基本介绍(Swift中数据类型)
swift语法的基本介绍(Swift中数据类型)
82 0
Swift和Scala语法上的诸多相似之处
国外开发者最近发现,WWDC2014上苹果发布的新语言Swift,和古老的Scala语言在语法上存在众多的相似之处。
128 0
Swift 5.3的进化:语法、标准库、调试能力大幅提升
Swift 从 5.0 的 ABI 稳定到5.1 的模块稳定,Swift 终于不是《Swift 入门到重学》了。本次 WWDC2020,Swift 5.3 正式发布,Swift 依旧朝着安全、高效、易读的方向持续发力,不断的在改进语法,增强代码的表达能力和易用性。因为 Swift 的模块稳定,SPM 现在也支持了二进制模块的分发,逐渐完善的社区生态也在不断拓宽 Swift 可以涉足的领域,而不仅仅是在 Apple 平台之上。
2277 0
Swift 5.3 又更新了什么新奇爽快的语法?
Swift 在 WWDC14 正式发布到 2019,经过 5 年的不断迭代,这其中经历了标准库变动,语法的增减。首先使用 Swift 作为开发语言的开发者们都苦不堪言,戏称《Swift 从入门到重学》,几乎每一年 Swift 都会迎来比较大的改动,甚至 API 都发生了变化。 WWDC 19 苹果发布了 Swift 5.0,苹果终于宣布 Swift 的 ABI 稳定。这标志着 Swift 这门语言已经趋于稳定,在 2019 至 2020 的迭代中,Swift 5.2 也做到了模块稳定,之前的大修大改已经不会在出现了。
2155 0
Swift中的泛型语法实践
先来简单的, 由浅入深嘛。
1300 0
+关注
珲少
文章
问答
视频
文章排行榜
最热
最新
相关课程
更多
相关电子书
更多
Swift在Airbnb的应用实践
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载