Swift学习笔记(14)--方法
2024-08-31 16:04:34
1.分类
方法分为实例方法和类型方法
实例方法(Instance Methods):与java中的类似,略
类型方法(Type Methods):与java、oc中的类方法类似.声明类的类型方法,在方法的func
关键字之前加上关键字class
;声明结构体和枚举的类型方法,在方法的func
关键字之前加上关键字static
。
方法的参数名参见学习笔记的函数章节
2.在实例方法中修改值类型和self
结构体和枚举是值类型。一般情况下,值类型的属性不能在它的实例方法中被修改。
但是,如果你确实需要在某个具体的方法中修改结构体或者枚举的属性,你可以选择变异(mutating)
这个方法,然后方法就可以从方法内部改变它的属性;并且它做的任何改变在方法结束时还会保留在原始结构中。方法还可以给它隐含的self
属性赋值一个全新的实例,这个新实例在方法结束后将替换原来的实例。要使用变异
方法, 将关键字mutating
放到方法的func
关键字之前就可以了:
//1.普通修改
struct Point {
var x = 0.0, y = 0.0
mutating func moveByX(deltaX: Double, y deltaY: Double) {
x += deltaX
y += deltaY
}
}
var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveByX(2.0, y: 3.0)
println("点坐标 (\(somePoint.x), \(somePoint.y))") //点坐标 (3.0, 4.0) //2.self重新赋值,效果与1一样
struct Point2 {
var x = 0.0, y = 0.0
mutating func moveByX(deltaX: Double, y deltaY: Double) {
self = Point2(x: x+deltaX, y: y+deltaY)
}
}
var somePoint2 = Point2(x: 1.0, y: 1.0)
somePoint2.moveByX(2.0, y: 3.0)
println("点坐标 (\(somePoint2.x), \(somePoint2.y))") //点坐标 (3.0, 4.0) //3.枚举的变异方法可以把self设置为相同的枚举类型中不同的成员:
enum TriStateSwitch {
case Off, Low, High
mutating func next() {
switch self {
case Off:
self = Low
case Low:
self = High
case High:
self = Off
}
}
}
var ovenLight = TriStateSwitch.Low
ovenLight.next() // ovenLight 现在等于 .High
ovenLight.next() // ovenLight 现在等于 .Off
最新文章
- css中定位
- MongoDB数据导入导出成csv或者json
- Entity Framework CodeFirst数据迁移
- hdu 4001 dp 2011大连赛区网络赛A
- 常州培训 day5 解题报告
- 记一段使用node对mysql数据库做处理
- H5移动前端完美布局之padding
- 寡人写的第一个HTML5页面
- web开发性能优化---扩展性能篇
- winapi获取鼠标位置
- 在基于debian的deepin或者Ubuntu上双等号“==”和双中括号“[[]]”不能使用的真相
- 隐写术之steghide的使用
- A1064. Complete Binary Search Tree
- 开源流媒体服务器SRS学习笔记(3) - HTTPCallback实现安全认证
- 前端开发神级IDE-sublime text
- mybatis使用时遇到的一些问题------模糊查询、处理大于号小于号、相关函数替换空值
- 科学计算三维可视化---TVTK入门(数据加载)
- 【多视图几何】TUM 课程 第3章 透视投影
- linux下强制退出指定用户开启的伪终端
- javascript中不存在块级作用域,所以要小心使用在块级作用域中的函数声明所带来的作用域混乱.
热门文章
- Yocto tips (15): Yocto中的包管理器
- [转]Python UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 的解决办法
- django 笔记7 多对多
- App server 与 Web server之间的区别
- 以下三种下载方式有什么不同?如何用python模拟下载器下载?
- 加载等待loading
- GoldenGate 日常监控
- 安装Debugging Tools时出现错误Setup could not find the file WinSDK_amd64的处理
- 洛谷 P1501 [国家集训队]Tree II Link-Cut-Tree
- 数据迁移工具kettle简单上手