博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift中的方法(Methods)
阅读量:6162 次
发布时间:2019-06-21

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

  hot3.png

写在前面

swift中结构体和  也能够定义方法,这是swift和OC的主要区别之一。在OC中类是唯一能定义方法的类型。但是在swift中类,结构体,枚举中都可以定义方法。

一、实例方法(Instance Methods)

实例方法是属于某个特定类、结构体或者枚举类型实例的方法。实例方法提供访问和修改实例属性的方法或提供与实例目的相关的功能。如:

class Person {    let name = "lisi"    func sleep() {        print("\(name) sleep--")    }    func walk(from:String,to:String) {        print("\(name) walk from \(from) to \(to)")    }    func run(_ from:String,to:String) {        print("")    }}

Person类定义了三个方法:

1.sleep

2.walk

3.run

此外Person类还声明了一个常量:name用来记录人的姓名

方法的调用使用 . 语法:

let p = Person()        p.walk(from: "home", to: "school")        p.sleep()

一、方法的局部参数名和外部参数名

函数参数可以同时有一个局部名称(在函数内部使用)和一个外部名称(在调用函数时使用)。

函数参数从第一个参数开始必须指定参数名(既是局部名称又是外部名称),除非使用 “_”指出省略外部参数名。

// 在调用的时候可以返现局部参数名和外部参数名的区别 p.run("home", to: "school") p.walk(from: "home", to: "school")

以上使用 _ 忽略了 run 方法的第一个参数的外部参数名。

二、self属性

类型的每一个实例都有一个隐含的属性叫做self。self完全等同于该实例本身。可以使用self属性来引用当前实例。

var age = 1    func growUp() {        self.age += 1    }

注意:当参数的名字和实例属性名字有冲突(重名)的时候,参数名称享有优先权,此时就需要使用 self来区分参数名称和属性名称。

let name = "lisi"    func sayHelloTo(name:String) {        print("\(self.name) say hello to \(name)")    }

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

结构体和枚举是值类型,一般情况下值类型的属性不能再他的实例方法中被修改。但是如果确实需要在某个方法中修改结构体或者枚举的的属性,可以在方法前添加 mutating 即可。

struct Point {        var x = 0,y = 0       mutating func moveByX(deltaX: Int,deltaY: Int) {            x += deltaX            y += deltaY        }    }
// 这样写会报错let point = Point() point.moveByX(deltaX: 2, deltaY: 2)

  注意:不能在结构体类型常量上调用变异(mutating)方法,因为常量的属性是不能被改变的,即使想修改的是常量(实例)的变量属性也不行(有点拗口)。

把上面的 let point = Point()改成 var point = Point()就可以了。

四、在变异方法中给self赋值

变异方法能够付给self一个全新的实例(原因终归:加了mutating后可以修改值类型的属性了,也就可以修改self)。上面的Point结构体可以这样写:

struct Point {        var x = 0,y = 0       mutating func moveByX(deltaX: Int,deltaY: Int) {        self = Point(x: x + deltaX,y: y + deltaY)        }    }

调用这个方法可以调用上面的方法结果是一样的。

再例如:

enum switchStatus {        case on,off                mutating func change() {            switch self {            case .on:                self = .off            case .off:                self = .on            }        }    }

上面定义了一个开关的枚举,每次调用change 方法时,开关的状态就会在on和off之间切换。

二、类型方法

 实例方法是被某个类型的实例调用的方法。也可以定义类型本身调用的方法,这种方法就叫类型方法。声明类的类型方法:在方法的 func 关键字之前加上关键字 class ,声明结构体和枚举的类型方法时在方法的 func 关键字之前加上关键字 static。

关于static和class更深层次的讲解可以看

注意:在OC中你只能为OC的类定义类型方法(类方法)。在swift中你可以为所有的类、结构体和枚举类型定义类型方法。每一个类型方法都被他所支持的类型显示包含。

类型方法和实例方法一样使用 . 语法调用 。但是实在类型的层面上滴啊用这个方法。在类型方法中 self指向这个类型本身(在实例方法中 self指向实例)。同样你也可以使用self来消除类型方法中属性和参数重名造成的歧义问题。

以上参考《swift基础教程》

转载于:https://my.oschina.net/zhxx/blog/789750

你可能感兴趣的文章
linux常用命令(用户篇)
查看>>
获取组件的方式(方法)
查看>>
win2008 server_R2 自动关机 解决
查看>>
我的友情链接
查看>>
在C#调用C++的DLL简析(二)—— 生成托管dll
查看>>
Linux macos 常用终端操作
查看>>
企业网络的管理思路
查看>>
Linux磁盘分区与挂载
查看>>
J2se学习笔记一
查看>>
DNS视图及日志系统
查看>>
老李分享:Android性能优化之内存泄漏 3
查看>>
mysql命令
查看>>
来自极客标签10款最新设计素材-系列七
查看>>
极客技术专题【009期】:web技术开发小技巧
查看>>
PHP 简单计算器代码实现
查看>>
正则表达式的知识普及
查看>>
docker使用笔记
查看>>
华为eNSP模拟器上实现FTP服务
查看>>
【全球AI人才排行榜】美国第一,中国仅排名第7
查看>>
微信小程序输入框input
查看>>