Вложенные типы в Swift (дополнение)

swift

#1

В прошлой теме я как то упустил псевдонимы типов, подумал и решил дополнить :slight_smile:

И так «Псевдонимы типов задают альтернативное имя для существующего типа». В частности такой псевдоним можно задать для кортежа, получится кортеж к которому можно обращаться по имени.

Пример:

class Class {
    
    typealias ObjectType = (
        text: String,
        name: String
    )
    
    let obj1 = ObjectType("Hello", "Swift Book")
    
    init() {
        let obj2 = ObjectType(
            text: "Hello",
            name: "Swift Book"
        )
    }
    
}

let obj3 = Class.ObjectType("Hello", "Swift Book")

Задаём псевдоним для кортежа и obj1, obj2, obj3 - варианты его использования. Почти структура.

Можно пойти дальше и создать для ObjectType конструктор:

class Class {
    
    typealias ObjectType = (
        text: String,
        name: String,
        print: () -> ()
    )
    
    func Object(name: String) -> ObjectType {
        var this: ObjectType!
        this = (
            text: "Hello",
            name: name,
            print: {
                print(self)
                print(this.text + " " + this.name)
            }
        )
        return this
    }
    
    init() {
        let obj = Object(name: "Swift Book")
        obj.print()
    }
    
}

Напоминает JavaScript :slight_smile: Тем не менее, можно рассматривать как альтернативный вариант создания объектов. И плюс можно обратится в конструкторе к self :wink: