Паттерны / Структурные паттерны
image

//Target
protocol IText {
    //Request()
    func getText() -> String
}

//Adaptee
class StringList {
    var rows: [String] = []

    //SpecificRequest()
    func getString() -> String {
        return rows.joined(separator: "\n")
    }

    func add(_ value: String) {
        rows.append(value)
    }
}

//Adapter
class TextAdapterIText {

    var rowList: StringList?

    //Request()
    func getText() -> String {
        if rowList == nil {
            return ""
        }
        return rowList!.getString()
    }
}

func getTextAdapter() -> TextAdapter {
    let adapter = TextAdapter()
    let rowList = StringList()
    rowList.add("line 1")
    rowList.add("line 2")
    adapter.rowList = rowList
    return adapter
}

//Client
let adapter = getTextAdapter()
let text = adapter.getText()
//text: line 1
//      line 2

print("text is \"\(text)\"")


Преобразует интерфейс класса в другой интерфейс, ожидаемый клиентами. Обеспечивает совместную работу классов, которая была бы невозможна без данного паттерна из-за несовместимости интерфейсов.