Swift学习笔记(14)--方法
1.分类
方法分为实例方法和类型方法
实例方法(Instance Methods):与java中的类似,略
类型方法(Type Methods):与java、oc中的类方法类似.声明类的类型方法,在方法的func
关键字之前加上关键字class
;声明结构体和枚举的类型方法,在方法的func
关键字之前加上关键字static
。
方法的参数名参见学习笔记的函数章节
2.在实例方法中修改值类型和self
结构体和枚举是值类型。一般情况下,值类型的属性不能在它的实例方法中被修改。
但是,如果你确实需要在某个具体的方法中修改结构体或者枚举的属性,你可以选择变异(mutating)
这个方法,然后方法就可以从方法内部改变它的属性;并且它做的任何改变在方法结束时还会保留在原始结构中。方法还可以给它隐含的self
属性赋值一个全新的实例,这个新实例在方法结束后将替换原来的实例。要使用变异
方法, 将关键字mutating
放到方法的func
关键字之前就可以了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | //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 |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步