Add Generics Section (#33367)

* Add Generics Section

* fix: added front matter block
pull/34091/merge
Ishan Chhabra 2019-01-27 08:16:52 +05:30 committed by Randell Dawson
parent 9359b1aa36
commit ddb81086a9
1 changed files with 46 additions and 0 deletions

View File

@ -0,0 +1,46 @@
---
title: Generics
---
# Generics
Write a name inside angle brackets to make a generic function or type.
```Swift
func makeArray<Item>(repeating item: Item, numberOfTimes: Int) -> [Item] {
var result = [Item]()
for _ in 0..<numberOfTimes {
result.append(item)
}
return result
}
makeArray(repeating: "knock", numberOfTimes: 4)
```
***You can make generic forms of functions and methods, as well as classes, enumerations, and structures.***
```Swift
// Reimplement the Swift standard library's optional type
enum OptionalValue<Wrapped> {
case none
case some(Wrapped)
}
var possibleInteger: OptionalValue<Int> = .none
possibleInteger = .some(100)
```
Use `where` right before the body to specify a list of requirements—for example, to require the type to implement a protocol, to require two types to be the same, or to require a class to have a particular superclass.
```swift
func anyCommonElements<T: Sequence, U: Sequence>(_ lhs: T, _ rhs: U) -> Bool
where T.Element: Equatable, T.Element == U.Element
{
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
return true
}
}
}
return false
}
anyCommonElements([1, 2, 3], [3])