Назовите один тип чем-нибудь другим

Сложность: Начинающий | Легко | Нормальный | Испытывающий

Псевдоним типа (typealias) - это именованный псевдоним существующего типа. В английском языке псевдоним часто используется для сокрытия чьей-либо личности.

Одно из основных преимуществ использования typealias заключается не в том, когда вы пишете код, а в том, что вы поддерживаете этот код с помощью Swift.

Эта статья о том, как вы можете использовать typealias в Swift.

Предпосылки:

  • Будьте комфортны при программировании в Swift Playgrounds (гайд ЗДЕСЬ)

Это несущественно, но полезно знать следующее:

  • Словари на Swift (справочник ЗДЕСЬ)
  • Дженерики и их использование в Swift (руководство ЗДЕСЬ)
  • Замыкания в Swift (гайд ЗДЕСЬ)

Терминология

Double: тип значения с плавающей запятой с двойной точностью

Строка: набор символов

тип: представление набора данных, которые могут быть обработаны, например Integer или String

typealias: такой тип представляет именованный псевдоним существующего типа

Мотивация

Основное использование

Можно использовать typealias и type, и их можно переключать по желанию. Мы можем сделать эту статью более читаемой, вызвав type существующий тип

typealias Dollar = Double
typealias Pound = Double
typealias Rouble = Double

То есть typealias означает, что мы можем использовать название валюты для существующего type, что сделает наш код Swift более читабельным.

Эти валюты можно использовать со следующим:

struct ShoppingBasket {
    let totalCost: Pound
    let item : [String]
}
let yourBasket = ShoppingBasket(totalCost: 5.99, item: ["bag", "cheese"])

В этом примере следует отметить, что фунт является не новым type, а является псевдонимом существующего типа Double.

Расширение typealias

Расширение typealias создает расширение для исходного типа, а не конкретно для псевдонима.

Если мы создадим расширение для Pound, как показано ниже

extension Pound {
    func toPence() -> Int {
        return Int(self * 100)
    }
}

Доступен с фунта type

Pound(2).toPence()

но также доступен из существующего Double type

Double(2).toPence()

Типалиас с Generics

typealias можно настроить для Словаря, возможно, для Словаря свойств.

typealias PropertiesDictionary = [String: String]
var propertiesDict: PropertiesDictionary = [:]
propertiesDict["Initial Property"] = "True"

Это, очевидно, замечательно, и с его помощью можно сделать понятным тип PropertiesDictionary в нашем коде.

Но, как вы, возможно, знаете, Swift может помочь вам, если вы не уверены в type, которое вы сохраните как значение в Словаре. Это обрабатывается в Swift через Generics. Пример? Это дано ниже:

typealias PropertiesGenericDictionary<T> = Dictionary<String, T>
var propertiesGenericDict: PropertiesGenericDictionary<Bool> = [:]
propertiesGenericDict["Initial Property"] = true

Здесь наш PropertiesGenericDictionary имеет общий type, и он дается так, как мы ожидали, и передается в typealias.

Разве это не здорово?

Типалиас с замыканиями

typealias может сделать функции более удобочитаемыми.

Примером может быть функция с обработчиком завершения.

func makeAuthenticatedCalls(_ completion: @escaping (NSString?)->()) {
    completion("Return value")
}
makeAuthenticatedCalls({ val in
    print (val as Any)
})

который может быть переработан с помощью typealias для обработчика завершения

typealias CompletionHandler =  (NSString?)->()
func makeAuthenticatedCallsWithTypeAlias(_ completion: @escaping CompletionHandler) {
    completion("Return value frin typealias completion handler")
}
makeAuthenticatedCallsWithTypeAlias({ val in
    print (val as Any)
})

теперь ясно, что, хотя здесь есть дополнительная строка, в этом есть преимущество - этот обработчик завершения легко заменить чем-то другим (другой функцией), если наша реализация изменится

Используйте typealias в качестве заполнителей

typealias для токена можно создать как строку

typealias Token = String

который можно использовать в некоторых функциях

func decodeToken(_ token: Token) {
    // some decode token algorithm
}

Это замечательно и говорит разработчикам кое-что о строке токена, которая будет использоваться.

Если мы хотим использовать более сложный токен

class Token {
    var tokenString: String?
}

который может использоваться точно такой же функцией - программист не должен вносить никаких изменений. Отлично!

func decodeToken(_ token: Token) {
    // some decode token algorithm
}

Заключение

Идея Swift, ну, по крайней мере, одна из идей, лежащих в основе языка, - это удобочитаемость и ремонтопригодность. Использование typealias в языке - отличная возможность, позволяющая писать читаемый код - фантастика!

Код

Полная детская площадка? Вы можете получить к нему доступ через следующее: https://gist.github.com/stevencurtis/ad3d33bed9a09bc2b1253bad8f5f3114

Расширьте свои знания

  • Apple создала документацию для деклараций псевдонимов типа ЗДЕСЬ

Контактное лицо в Twitter:

Любые вопросы? Вы можете связаться со мной здесь