RbObjectCollection
public struct RbObjectCollection: RandomAccessCollection,
    MutableCollection,
    RangeReplaceableCollection,
    RbObjectConvertibleA view onto a Ruby array using Swift collection protocols.
This is an adapter type that wraps an RbObject and adopts
Swift collection protocols for use with an underlying Ruby
array (or any Ruby object that supports length, [], and
[]=.)
For example:
myObj.collection.replaceSubrange(lower..<upper, with: otherArray)
This is separate to RbObject to avoid dumping all the
collection protocol members into its dynamic member lookup
namespace.
Topics
init(RbObject)
        init(RbObject)
        
      
    Create a collection from an existing Ruby array object.
The same thing as accessing RbObject.collection.
Declaration
public init(_ value: RbObject)var rubyObject: RbObject
        var rubyObject: RbObject
        
      
    The Ruby object for the underlying array.
Declaration
public private(set) var rubyObject: RbObject { get }Collection protocol conformance
init()
        init()
        
      
    Create an empty collection - an empty Ruby array.
Declaration
public init()var startIndex: Int
        var startIndex: Int
        
      
    
    
  var endIndex: Int
        var endIndex: Int
        
      
    The collection’s “past the end” position—that is, the position one greater than the last valid subscript argument.
When you need a range that includes the last element of a collection, use the half-open range operator (<) with endIndex. The < operator creates a range that doesn’t include the upper bound, so it’s always safe to use with endIndex. For example:
let numbers = [10, 20, 30, 40, 50]
if let index = numbers.firstIndex(of: 30) {
    print(numbers[index ..< numbers.endIndex])
}
// Prints "[30, 40, 50]"
If the collection is empty, endIndex is equal to startIndex.
Declaration
public var endIndex: Int { get }subscript(index: Int) -> RbObject
        subscript(index: Int) -> RbObject
        
      
    Accesses the element at the specified position.
For example, you can replace an element of an array by using its subscript.
var streets = ["Adams", "Bryant", "Channing", "Douglas", "Evarts"]
streets[1] = "Butler"
print(streets[1])
// Prints "Butler"
You can subscript a collection with any valid index other than the collection’s end index. The end index refers to the position one past the last element of a collection, so it doesn’t correspond with an element.
O(1)
Declaration
Parameters
| position | The position of the element to access.  | 
func index(after: Int) -> Int
        func index(after: Int) -> Int
        
      
    Returns the position immediately after the given index.
The successor of an index must be well defined. For an index i into a collection c, calling c.index(after: i) returns the same index every time.
Declaration
Parameters
| i | A valid index of the collection.  | 
Return Value
The index value immediately after i.
func replaceSubrange<C>(Range<Int>, with: C)
        func replaceSubrange<C>(Range<Int>, with: C)
        
      
    Replaces the specified subrange of elements with the given collection.
This method has the effect of removing the specified range of elements from the collection and inserting the new elements at the same location. The number of new elements need not match the number of elements being removed.
In this example, three elements in the middle of an array of integers are replaced by the five elements of a > 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]"
If you pass a zero-length range as the subrange parameter, this method inserts the elements of newElements at subrange.startIndex. Calling the insert(contentsOf:at:) method instead is preferred.
Likewise, if you pass a zero-length collection as the newElements parameter, this method removes the elements in the given subrange without replacement. Calling the removeSubrange(_:) method instead is preferred.
Calling this method may invalidate any existing indices for use with this collection.
O(n + m), where n is length of this collection and m is the length of newElements. If the call to this method simply appends the contents of newElements to the collection, this method is equivalent to append(contentsOf:).
Declaration
public mutating func replaceSubrange<C>(
    _ subrange: Range<Int>, with newElements: C)
where C: Collection, C.Element: RbObjectConvertibleParameters
| subrange | The subrange of the collection to replace. The bounds of the range must be valid indices of the collection. | 
| newElements | The new elements to add to the collection. |