Внедрить Hashable
, что также требует, чтобы вы выполняли оператор ==
для вашего типа. Они используются для большого количества полезных материалов в стандартной библиотеке Swift, такой как функция indexOf
, которая работает только с коллекциями типа, который реализует Equatable
или тип Set<T>
, который работает только с типами, реализующими Hashable
.
/descendant::dupe_node[1]
//dupe_node[1]
является обычно неправильным, хотя это приводит к идентичному результату в данном случае. См. документы :
путь местоположения//параграф [1] не означает то же как путь местоположения / потомок:: параграф [1]. Последние выборы первый порожденный элемент параграфа; первый выбирает все порожденные элементы параграфа, которые являются первыми детьми параграфа их родителей.
, Учитывая следующий XML:
<foo>
<bar/>
<foo>
<bar/>
</foo>
</foo>
//bar[1]
произведет два узла, потому что обе панели являются первыми детьми своих соответствующих родителей.
/descendant::bar[1]
даст только один узел, который является, в первую очередь, панели в документе.
//dupe_node[1]
XPath рассчитывает от 1, не 0 в этом случае. Можно использовать этот инструмент для испытания вещей в браузере: