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

  

最新文章

  1. css中定位
  2. MongoDB数据导入导出成csv或者json
  3. Entity Framework CodeFirst数据迁移
  4. hdu 4001 dp 2011大连赛区网络赛A
  5. 常州培训 day5 解题报告
  6. 记一段使用node对mysql数据库做处理
  7. H5移动前端完美布局之padding
  8. 寡人写的第一个HTML5页面
  9. web开发性能优化---扩展性能篇
  10. winapi获取鼠标位置
  11. 在基于debian的deepin或者Ubuntu上双等号“==”和双中括号“[[]]”不能使用的真相
  12. 隐写术之steghide的使用
  13. A1064. Complete Binary Search Tree
  14. 开源流媒体服务器SRS学习笔记(3) - HTTPCallback实现安全认证
  15. 前端开发神级IDE-sublime text
  16. mybatis使用时遇到的一些问题------模糊查询、处理大于号小于号、相关函数替换空值
  17. 科学计算三维可视化---TVTK入门(数据加载)
  18. 【多视图几何】TUM 课程 第3章 透视投影
  19. linux下强制退出指定用户开启的伪终端
  20. javascript中不存在块级作用域,所以要小心使用在块级作用域中的函数声明所带来的作用域混乱.

热门文章

  1. Yocto tips (15): Yocto中的包管理器
  2. [转]Python UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 的解决办法
  3. django 笔记7 多对多
  4. App server 与 Web server之间的区别
  5. 以下三种下载方式有什么不同?如何用python模拟下载器下载?
  6. 加载等待loading
  7. GoldenGate 日常监控
  8. 安装Debugging Tools时出现错误Setup could not find the file WinSDK_amd64的处理
  9. 洛谷 P1501 [国家集训队]Tree II Link-Cut-Tree
  10. 数据迁移工具kettle简单上手