Methods

作者: 宋奕Ekis | 来源:发表于2021-08-10 09:51 被阅读0次

Like OC, we can make instance methods and type methods(like class methods in OC).

And the structure resembles Function.

Instance Methods

class Counter {
    var count = 0
    func increment() {
        count += 1
    }
    func increment(by amount: Int) {
        count += amount
    }
    func reset() {
        count = 0
    }
}

Modifying Value Types from Within Instance Methods

We use mutating keyword to prefix function name to make it can modify property in value types, just like Structures and Enmuerations, because the properties of a value type can’t be modified from within its instance methods..

struct Point {
    var x = 0.0, y = 0.0
    mutating func moveBy(x deltaX: Double, y deltaY: Double) {
        x += deltaX
        y += deltaY
    }
}
var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveBy(x: 2.0, y: 3.0)
print("The point is now at (\(somePoint.x), \(somePoint.y))")
// Prints "The point is now at (3.0, 4.0)"

Assigning to self Within a Mutating Method

struct Point {
    var x = 0.0, y = 0.0
    mutating func moveBy(x deltaX: Double, y deltaY: Double) {
        self = Point(x: x + deltaX, y: y + deltaY)
    }
}

Type Methods

We use static prefix function name to make it type method, alternatively we alse use class for method in Class.

class SomeClass {
    class func someTypeMethod() {
        // type method implementation goes here
    }
}
SomeClass.someTypeMethod()
struct LevelTracker {
    static var highestUnlockedLevel = 1
    var currentLevel = 1

    static func unlock(_ level: Int) {
        if level > highestUnlockedLevel { highestUnlockedLevel = level }
    }

    static func isUnlocked(_ level: Int) -> Bool {
        return level <= highestUnlockedLevel
    }

    @discardableResult
    mutating func advance(to level: Int) -> Bool {
        if LevelTracker.isUnlocked(level) {
            currentLevel = level
            return true
        } else {
            return false
        }
    }
}

Let’s think!

相关文章

网友评论

    本文标题:Methods

    本文链接:https://www.haomeiwen.com/subject/rxjxbltx.html