A collection that supports replacement of an arbitrary subrange of elements with the elements of another collection.
SDK
- Xcode 8.0+
Framework
- Swift Standard Library
Declaration
protocol RangeReplaceableCollection where Self.SubSequence : RangeReplaceableCollection
Overview
Range-replaceable collections provide operations that insert and remove elements. For example, you can add elements to an array of strings by calling any of the inserting or appending operations that the Range
protocol defines.
var bugs = ["Aphid", "Damselfly"]
bugs.append("Earwig")
bugs.insert(contentsOf: ["Bumblebee", "Cicada"], at: 1)
print(bugs)
// Prints "["Aphid", "Bumblebee", "Cicada", "Damselfly", "Earwig"]"
Likewise, Range
types can remove one or more elements using a single operation.
bugs.removeLast()
bugs.removeSubrange(1...2)
print(bugs)
// Prints "["Aphid", "Damselfly"]"
bugs.removeAll()
print(bugs)
// Prints "[]"
Lastly, use the eponymous replace
method to replace a subrange of elements with the contents of another collection. Here, three elements in the middle of an array of integers are replaced by the five elements of a Repeated<Int>
instance.
var nums = [10, 20, 30, 40, 50]
nums.replaceSubrange(1...3, with: repeatElement(1, count: 5))
print(nums)
// Prints "[10, 1, 1, 1, 1, 1, 50]"
Conforming to the RangeReplaceableCollection Protocol
To add Range
conformance to your custom collection, add an empty initializer and the replace
method to your custom type. Range
provides default implementations of all its other methods using this initializer and method. For example, the remove
method is implemented by calling replace
with an empty collection for the new
parameter. You can override any of the protocol’s required methods to provide your own custom implementation.