服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Swift - 详解Swift面向对象编程中的方法(method)

详解Swift面向对象编程中的方法(method)

2020-12-26 17:15珲少 Swift

既然面向对象那就一定会有method,方法和面向过程语言中的function函数并没什么区别,只不过方法在面向对象语言中可以被类来约束作用域,这里我们就来详解Swift面向对象编程中的方法(method)

?
1
2
3
4
5
6
7
8
9
10
11
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()

一、引言

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

二、实例方法基础

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

?
1
2
3
4
5
6
7
8
9
10
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来调用属性或者其他实例方法,示例如下:

?
1
2
3
4
5
6
7
8
9
10
11
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来调用属性和方法:

?
1
2
3
4
5
6
7
8
9
10
11
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来调用类的实例属性,防止歧义的产生:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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关键字将实例方法声明成可变的,实际上,如果在可变的实例方法中修改了值类型属性的值,是会创建一个新的实例来代替原来的实例的,示例如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
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)

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

?
1
2
3
4
5
6
7
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关键字来进行类型方法的创建:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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()

延伸 · 阅读

精彩推荐
  • SwiftSwift使用CollectionView实现广告栏滑动效果

    Swift使用CollectionView实现广告栏滑动效果

    这篇文章主要为大家详细介绍了Swift使用CollectionView实现广告栏滑动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Stevin的技术博客12372021-01-13
  • SwiftSwift能代替Objective-C吗?

    Swift能代替Objective-C吗?

    这是我在网上上看到的答案,复制粘贴过来和大家分享一下,因为我和很多人一样很关心Swift的出现对Mac开发的影响和对Objective-C的影响。...

    Swift教程网4412020-12-16
  • SwiftSwift教程之基础数据类型详解

    Swift教程之基础数据类型详解

    这篇文章主要介绍了Swift教程之基础数据类型详解,本文详细讲解了Swift中的基本数据类型和基本语法,例如常量和变量、注释、分号、整数、数值类型转换等...

    Swift教程网5162020-12-18
  • SwiftSwift实现多个TableView侧滑与切换效果

    Swift实现多个TableView侧滑与切换效果

    这篇文章主要为大家详细介绍了Swift实现多个TableView侧滑与切换效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    乞力马扎罗的雪雪5822021-01-08
  • SwiftSwift的74个常用内置函数介绍

    Swift的74个常用内置函数介绍

    这篇文章主要介绍了Swift的74个常用内置函数介绍,这篇文章列举出了所有的Swift库函数,内置函数是指无需引入任何模块即可以直接使用的函数,需要的朋友可...

    Swift教程网5802020-12-19
  • Swiftmac git xcrun error active developer path 错误

    mac git xcrun error active developer path 错误

    本文主要是讲诉了如何解决在mac下使用git;xcode4.6的环境时,出现了错误(mac git xcrun error active developer path)的解决办法,希望对大家有所帮助...

    Swift教程网2232020-12-16
  • Swiftswift where与匹配模式的实例详解

    swift where与匹配模式的实例详解

    这篇文章主要介绍了swift where与匹配模式的实例详解的相关资料,这里附有简单的示例代码,讲的比较清楚,需要的朋友可以参考下...

    追到梦的魔术师14382021-01-06
  • SwiftSwift中转义闭包示例详解

    Swift中转义闭包示例详解

    在Swift 中的闭包类似于结构块,并可以在任何地方调用,下面这篇文章主要给大家介绍了关于Swift中转义闭包的相关资料,需要的朋友可以参考下...

    小小小_小朋友11412021-12-26