DevPrep

Все темы › Основные понятия программирования

Метод

Junior

Суть

Метод — функция, привязанная к типу. У неё есть неявный self, и она работает с состоянием экземпляра или типа. В Swift методы есть не только у классов, но и у struct, enum, actor и даже у протоколов через extension.

Виды методов в Swift

struct Counter {
    private(set) var value = 0
    mutating func increment() { value += 1 }       // метод меняет value type
    static func zero() -> Counter { Counter() }    // метод типа (фабрика)
}

class Shape {
    class func make() -> Shape { Shape() }         // class func можно override
    func area() -> Double { 0 }                    // vtable dispatch
    final func describe() -> String { "area \(area())" }   // static dispatch
}

final class Circle: Shape {
    var r = 1.0
    override func area() -> Double { .pi * r * r }
}

var c = Counter.zero()
c.increment()
print(c.value)                 // 1
print(Circle().describe())     // area 3.141592653589793

Диспетчеризация — что спросят у middle

Метод, объявленный в extension класса, диспетчеризуется статически и не переопределяется — классическая ловушка на собеседовании.

Инкапсуляция

Методы — публичный интерфейс к приватному состоянию: private(set) var value плюс increment() гарантируют, что счётчик меняется только по правилам типа.

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store