DevPrep

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

Прототип

Junior

Суть

Прототип — готовый объект-образец, с которого копируют новые объекты вместо того, чтобы конструировать их с нуля. В языках с прототипным наследованием (JavaScript) это основа объектной модели: объект ссылается на прототип и наследует его свойства динамически. Swift и Objective-C — классовые языки, поэтому для iOS-разработчика «прототип» — это прежде всего паттерн Prototype: клонирование объекта с его состоянием.

Как это выглядит в Swift

import Foundation

final class Document: NSCopying {
    var title: String
    var tags: [String]
    init(title: String, tags: [String]) { self.title = title; self.tags = tags }

    func copy(with zone: NSZone? = nil) -> Any {
        Document(title: title, tags: tags)    // копируем нужные поля сами
    }
}

let template = Document(title: "Отчёт", tags: ["draft"])
let doc = template.copy() as! Document
doc.title = "Отчёт за Q3"
print(template.title)        // Отчёт — прототип не изменился

// Для struct «прототип» бесплатен: присваивание уже делает копию
struct Theme { var accent = "blue"; var font = "SF Pro" }
let base = Theme()
var dark = base
dark.accent = "purple"
print(base.accent, dark.accent)   // blue purple

Где встречается в iOS

На что смотрит интервьюер

Отличаете ли вы прототипное наследование (JavaScript) от паттерна Prototype, и понимаете ли, что в Swift клонировать нужно только reference types, а для struct это бесплатно.

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

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

Скачать DevPrep в App Store