Дженерики
В мире языков программирования существует парадигма обобщенной разработки. Она заключается в возможности создавать алгоритмы, одинаково работающие с разными, заранее неизвестными типами входных данных.
Для ее реализации Swift обладает дженериками, которые уже в полной мере задействованы в стандартной библиотеке. Например, массивы и словари, где тип элементов неизвестен вплоть до инициализации, построены с ними.
Можно сказать, что методы, структуры и классы, написанные с применением дженериков, способны принимать типы в качестве параметров и использовать их в коде.
import UIKit
// Generic struct
struct SuperSet<T> {
let array = [T]()
}
// Generic function
func swapTwoValues<T>(inout a: T, inout _ b: T) {
let temporaryA = a
a = b
b = temporaryA
}
let superset = SuperSet<Int>()
var a: Int = 1
var b: Int = 2
swapTwoValues(&a, &b)
var c: CGFloat = 3.0
var d: CGFloat = 4.0
swapTwoValues(&c, &d)
В дополнение, параметры дженериков допускают ограничение по наследованию от определенных классов и соответствию протоколам. Для этого предназначена конструкция where.
import UIKit
protocol Swiftable {
func swift()
}
func addSwiftableView<T where T: UIView, T: Swiftable>(swiftableView: T) {
// Some code...
}