swift methods scraps

// Methods are functions associate with types: Class, Structs and Enums

// 1. Type methods: like type properties, they are static and tied with Type

// 2. Instance methods: belong to specific instance


struct Count{

    var count = 0

    // stuct and enum are value types

    // by default property of value type cannot be modified within it's 

    // instance methods. hence below you put a mutating keyword

    mutating func increment() {

        self.count += 1 // you can also put count += 1

    }

    

    mutating func increment(by count:Int){

        self.count = self.count + count

        // parameter take precedence when name are same

    }

    

    mutating func reset(){

        count = 0

    }

    // u can create a new instance and assign it to self

    mutating func assignNewCount(by startCount:Int){

        self = Count(count : startCount)

    }

    

}


// though you put mutating to amend the var property in Struct or Enum

// but if you assign it to a constant instance, you can't amend

// because it's value type and constant can't amend


let cantAmend = Count()

//cantAmend.increment()


enum Direction{

    case Shang,Xia,Zuo,You

    mutating func next(){

        switch self {

        case .Shang:

            self = .Xia

        case .Xia:

            self = .Zuo

        case .Zuo:

            self = .You

        case .You:

            self = .Shang

        }

    }

}


var someDirection = Direction.Shang

print(someDirection)

someDirection.next()

print(someDirection)




// ************   Type methods AKA static/class methods *************

// 1. within Type methods, self refer to the Type

// 2. diff from inst methods, in type methods you call type propty directly


// example from guide


struct LevelTracker {

    var currentLevel = 1

    static var maxLevel = 1

    static func unLock(_ level:Int){

        if(level>maxLevel){

            maxLevel=level

        }

    }

    static func isUnlocked(_ level:Int) -> Bool {

        return level <= maxLevel

    }

    // add mutating because you are about to amend struct property

    mutating func advance(_ level: Int){

        if(LevelTracker.isUnlocked(level)){ // because it's instance method

            currentLevel = level

        }

    }

}


class Player {

    var levelTracker = LevelTracker()

    let playerName:String

    init(name:String){

        playerName = name // for instance method, you can omit self

    }

    func complete(_ level:Int){

        LevelTracker.unLock(level+1)

        levelTracker.advance(level+1)

    }

}



var playerA = Player(name: "zhangsan")

var playerB = Player(name: "Lisi")


playerA.complete(3)

playerA.levelTracker.advance(2)

playerA.levelTracker.currentLevel

playerB.levelTracker.currentLevel

playerB.levelTracker.advance(2)

playerB.levelTracker.currentLevel




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值