In the Standard Library's implementation, I see usage of an override keyword sometimes preceding the declaration of a protocol requirement. For example, in the declaration of the requirements of RandomAccessCollection, there is frequent usage of this keyword, such as:
/// Returns the position immediately before the given index.
///
/// - Parameter i: A valid index of the collection. `i` must be greater than
/// `startIndex`.
/// - Returns: The index value immediately before `i`.
override func index(before i: Index) -> Index
What does this keyword do? Where is it documented?
As a related matter, what does the @_nonoverride keyword do? (I ask not because I plan to use it, but to better understand what I'm reading in the Standard Library implementation.)