Вложенные типы

Последнее обновление: 04.01.2018

Типы могут быть вложенными (nested). Класс или структура может содержать определение другого класса или структуры. Например:

class User{
    var name: String
    var age: Int
    var profile: UserProfile
        
    struct UserProfile{
        var login: String
        var password: String
            
        func authenticate(_ login: String, _ password: String) -> Bool{
            return self.login == login && self.password == password
        }
    }
    
    init(name: String, age: Int, login: String, password: String){
        self.name = name
        self.age = age
        self.profile = UserProfile(login: login, password: password)
    }
}
    
var tom = User(name: "Tom", age: 23, login: "querty", password: "12345")
print(tom.profile.authenticate("sdf", "456"))           // false
print(tom.profile.authenticate("querty", "12345"))      // true

Здесь структура UserProfile является вложенной. Вложенные типы также могут определять свойства, методы, инициализаторы. А внешний тип может хранить объект вложенного типа.

Также вложенные типы могут использовать вне своего типа, в котором они определены. В этом случае к ним необходимо обращаться через имя внешнего типа:

var profile = User.UserProfile(login: "ssdf", password: "345")
var isLoged = profile.authenticate("ssdf", "345")               // true
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850