Podsumowanie: technicznie rzecz biorąc, underestimatedCount
należący do Sequence
i pobiera dziedziczone przez Collection
i Dictionary
. Dictionary
nie zastępuje domyślnej implementacji, która zwraca zero.
Patrząc na kod źródłowy, wydaje się, że underestimatedCount
służy jako wskaźnik do określenia kwoty wzrostu jest zmienny kolekcji kiedy nowe elementy są dodawane do niego.
Oto urywek z StringCore.Swift:
public mutating func append<S : Sequence>(contentsOf s: S)
where S.Iterator.Element == UTF16.CodeUnit {
...........
let growth = s.underestimatedCount
var iter = s.makeIterator()
if _fastPath(growth > 0) {
let newSize = count + growth
let destination = _growBuffer(newSize, minElementWidth: width)
Podobnie, od StringCharacterView.swift:
public mutating func append<S : Sequence>(contentsOf newElements: S)
where S.Iterator.Element == Character {
reserveCapacity(_core.count + newElements.underestimatedCount)
for c in newElements {
self.append(c)
}
}
Albo jeszcze lepiej, z Arrays.swift.gyb:
public mutating func append<S : Sequence>(contentsOf newElements: S)
where S.Iterator.Element == Element {
let oldCount = self.count
let capacity = self.capacity
let newCount = oldCount + newElements.underestimatedCount
if newCount > capacity {
self.reserveCapacity(
Swift.max(newCount, _growArrayCapacity(capacity)))
}
_arrayAppendSequence(&self._buffer, newElements)
}
dziwo, udało mi się znaleźć tylko jedna implementacja dla underestimatedCount
, w Sequence, a ten zwraca zero.
W tej chwili wydaje się, że underestimatedCount
ma więcej wartości do niestandardowych implementacji kolekcji/sekwencji, tak jak w przypadku standardowych kolekcji Swift Firma Apple ma już dobre pojęcie o ich rozwoju.
Istnieje [dyskusja z listy mailingowej] (https://www.mail-archive.com/[email protected]/msg00614.html) i nie jesteś pierwszym, który narzeka na [złe dokumentacja] (https://bugs.swift.org/browse/SR-991) –