//: Playground - noun: a place where people can play
import UIKit
// # 实例方法
// 根据闭包的捕获性质,实例方法默认可以访问同类下所有其他实例方法和属性。实例方法只能在类型的具体实例里被调用。它不能独立于实例而被调用。
// self完完全全与实例本身相等,可以在当前实例中调用实例本身
// 默认情况下,值类型(struct, enum)属性不能被自身的实例方法修改。
// 添加了mutating关键字后,方法可以修改实例中的属性,还可以赋新值给实例本身.当然如果实例本身标注了let,那就都无法修改了
struct Point {
var x = 0.0, y = 0.0
mutating func moveBy(x deltaX: Double, y deltaY: Double) {
let new = Point(x: x + deltaX, y: x + deltaY)
self = new
}
}
// 在枚举中改变self
var somePoint = Point(x: 1, y: 1)
somePoint.moveBy(x: 1, y: 1)
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.next()
// # 类型方法
// func前标注static
// 可以用调用类型方法的方式来调用init
class Human {
var isBeauty: Bool
init(isBeauty: Bool) {
self.isBeauty = isBeauty
}
}
var susan = Human.init(isBeauty: true)
var lily = Human(isBeauty: false)
// 使用 class关键字来允许子类重写父类对类型方法的实现。实例方法本来就随便重写所以不用标注class
class SomeClass {
class func someTypeMethod() {
// type method implementation goes here
}
class var sw: Int {
return 0
}
}
SomeClass.someTypeMethod()
SomeClass.sw
// 一个类型方法可以使用方法名调用另一个类型方法,并不需要使用类型名字作为前缀。如果在其他情况,比如类型内的实例属性和方法,或类型外,都要加上类型名前缀.
11.方法 Methods Swift官方文档——版纳的笔记
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 还记得2016年全国数千名舞者相聚瓮安的盛会么? 还记得2016年舞蹈大赛盛况空前的开幕式么? 还记得2016年美...