На самом деле, нет никаких сомнений в том, что создание псевдонима типа для, скажем, String: typealias MyString = String
было бы не так уж полезно (я также предположил бы, что объявление псевдонима типа для Dictionary с определенным типом ключа/значения: typealias CustomDict = Dictionary<String, Int>
может оказаться не таким уж полезным для ты.
Однако когда дело доходит до работы с составными типами вы определенно заметите преимущества псевдонимов типов.
Пример:
Учтите, что вы реализуете менеджер, который многократно работает с замыканиями со многими параметрами в своих функциях:
class MyManager {
//...
func foo(success: (_ data: Data, _ message: String, _ status: Int, _ isEnabled: Bool) -> (), failure: (_ error: Error, _ message: String, _ workaround: AnyObject) -> ()) {
if isSuccess {
success(..., ..., ..., ...)
} else {
failure(..., ..., ...)
}
}
func bar(success: (_ data: Data, _ message: String, _ status: Int, _ isEnabled: Bool) -> (), failure: (_ error: Error, _ message: String, _ workaround: AnyObject) -> ()) {
if isSuccess {
success(..., ..., ..., ...)
} else {
failure(..., ..., ...)
}
}
// ...
}
Как видите, сигнатуры методов выглядят действительно утомительно! оба метода принимают success
и failure
параметров, каждый из них является замыканием с аргументами; Кроме того, для реализации подобных функций не так уж и логично сохранять параметры копипаст.
Реализация typealias
для такого случая была бы уместна:
class MyManager {
//...
typealias Success = (_ data: Data, _ message: String, _ status: Int, _ isEnabled: Bool) -> ()
typealias Failure = (_ error: Error, _ message: String, _ workaround: AnyObject) -> ()
func foo(success: Success, failure: Failure) {
if isSuccess {
success(..., ..., ..., ...)
} else {
failure(..., ..., ...)
}
}
func bar(success: Success, failure: Failure) {
if isSuccess {
success(..., ..., ..., ...)
} else {
failure(..., ..., ...)
}
}
// ...
}
Таким образом, он будет более выразительным и читабельным.
Кроме того, вы можете проверить средний рассказ Я писал об этом.
person
Ahmad F
schedule
21.11.2017