Назовите один тип чем-нибудь другим
Сложность: Начинающий | Легко | Нормальный | Испытывающий
Псевдоним типа (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:
Любые вопросы? Вы можете связаться со мной здесь