1坎吻、方法:完成某些特性功能的函數(shù)
//方法分為需要通過(guò)創(chuàng)建實(shí)例調(diào)用的實(shí)例方法和直接可以通過(guò)類型名調(diào)用的類型方法剃执,結(jié)構(gòu)體穗慕、類蝙寨、枚舉中都能定義方法
class Counter {
var count = 0 //可變屬性
func increment() {// 計(jì)數(shù)器按一遞增的實(shí)例方法
count += 1
}
func incrementBy(amount: Int) {//計(jì)數(shù)器按指定整數(shù)遞增的實(shí)例方法
count += amount
}
func reset() { //計(jì)數(shù)器置為0的實(shí)例方法
self.count = 0 //self可省略计技,表示當(dāng)前實(shí)例
}
}
let counter = Counter() //創(chuàng)建一個(gè)實(shí)例
counter.increment()//調(diào)用遞增1的實(shí)例方法
print(counter.count)//1
counter.incrementBy(amount: 4)//5
print(counter.count)
counter.reset()
print(counter.count)//0
2喜德、實(shí)例方法:提供訪問(wèn)和修改實(shí)例的屬性的方法、
3垮媒、結(jié)構(gòu)體和枚舉不是引用類型舍悯,是值類型航棱,值類型的屬性不能直接在實(shí)例方法中修改
struct Point { //利用結(jié)構(gòu)體坐標(biāo)移動(dòng)
var x = 0.0, y = 0.0
//添加mutating關(guān)鍵字可以從方法內(nèi)部改變結(jié)構(gòu)體的屬性
mutating func movedByX(deltaX: Double, y deltaY: Double){
x += deltaX
y += deltaY
}
}
var somePoint = Point(x: 1.0,y: 1.0)
somePoint.movedByX(deltaX: 2.0, y: 3.0)//該方法是修改了這個(gè)點(diǎn),而不是返回新的點(diǎn)
print("(somePoint.x),(somePoint.y)")
let fixedPoint = Point(x: 2.0,y: 4.0)
fixedPoint.movedByX(deltaX: 2.0, y: 2.0)//常量結(jié)構(gòu)體的類型的屬性不能被改變
4萌衬、self代表自身饮醇,在可變方法中給self賦值
struct NewPoint {
var x = 0.0, y = 0.0
//添加mutating關(guān)鍵字可以從方法內(nèi)部改變結(jié)構(gòu)體的屬性
mutating func movedByX(deltaX: Double, y deltaY: Double){
self = NewPoint(x: x+deltaX,y: y+deltaY)
}
}
var someNewPoint = NewPoint(x: 2,y: 3)
someNewPoint.movedByX(deltaX: 3, y: 5)
print(someNewPoint)
enum StateSwitch {
case Off, Low, High //定義三種狀態(tài)
//枚舉也是值類型,改變其屬性也要加mutating
mutating func next(){
switch self {
case .Off:
self = .Low
case .Low:
self = .High
case .High:
self = .Off
}
}
}
var ovenLight = StateSwitch.Low //low
ovenLight.next() //high
ovenLight.next() //Off
5秕豫、類方法:直接通過(guò)類名本身調(diào)用方法朴艰,可以是類、結(jié)構(gòu)體混移、枚舉
class Level {
static var commonLevel = 1 //公共等級(jí)
//通過(guò)添加class關(guān)鍵子變成類方法祠墅,該方法允許子類繼承
class func addOneLevel(){//公共等級(jí)加1
commonLevel += 1
}
//通過(guò)static關(guān)鍵字變成類方法
static func addLevelBy(level: Int){
commonLevel += level
}
var currentlevel = 1 //實(shí)例等級(jí)
//實(shí)例方法
func MaxLevel() -> Int {//比較厚返回較大的等級(jí)數(shù)
if currentlevel >= Level.commonLevel {
return currentlevel
}else{
return Level.commonLevel
}
}
}
Level.addOneLevel()
Level.addLevelBy(level: 3)
print(Level.commonLevel)//5
let player1 = Level()
player1.currentlevel = 2
print(player1.MaxLevel())//5
let player2 = Level()
player2.currentlevel = 6
print(player2.MaxLevel())//6