Я пытаюсь получить индекс элемента, содержащегося в определенном классе, который соответствует глобальной переменной. Поиск узлов с помощью запросов CSS дает мне список с потенциальными совпадающими элементами, но — как документация Канны указывает, что такие запросы возвращают XPathObjects
, которые действуют как массивы. Единственный способ, которым я вижу, чтобы получить значения индекса из указанного списка, - это преобразовать его из массива в строку, которую затем можно разделить на новые строки; однако я не могу заставить список принимать строковое значение. Соответствующая часть типичного журнала сеанса компиляции выглядит следующим образом:
Kazuo®/Ishiguro® Auprès® (2 pack)
Orange
Kazuo®/Ishiguro® Auprès® Folio Toujours (2 Pack)
Blue
…
Я пробовал три метода, предложенных одним плакатом в этот поток, чтобы объединить вывод выше:
1). компонентыSeparatedByCharactersInSet
for node in (doc?.css("a[class^='product-link']"))! {
let multiLineString = node.text!
let newlineChars = NSCharacterSet.newlineCharacterSet()
let lineArray = multiLineString.componentsSeparatedByCharactersInSet(newlineChars).filter{! $0.isEmpty}
}
В идеале это напечатает [Kazuo®/Ishiguro® Auprès® (2 pack), Orange, Kazuo®/Ishiguro® Auprès® Folio Toujours (2 Pack), Blue]
; вместо этого выдает ошибку. Нажатие fix
приводит к еще одной ошибке — и еще одной.
2). расколоть
for node in (doc?.css("a[class^='product-link']"))! {
let multiLineString = node.text!
let newlineChars = NSCharacterSet.newlineCharacterSet()
let lineArray = multiLineString.utf16.split { newlineChars.characterIsMember($0) }.flatMap(String.init)
}
Дает тот же результат, что и componentsSeparatedByCharactersInSet
: Cannot call value of non-function type 'CharacterSet'
-> fix
-> ошибка -> fix
-> ошибка.
3). enumerateLines
for node in (doc?.css("a[class^='product-link']"))! {
let multiLineString = node.text!
var lineArray = [String]()
multiLineString.enumerateLines { (line, stop) -> () in
lineArray.append(line)
}
}
Это решение фактически создает, но возвращает каждый элемент списка как function()
.
Эти методы работают, когда я пробую их с простыми многострочными строковыми литералами в Playgrounds, но по какой-то причине они не работают с выводом выше. Самый простой способ решить эту проблему — использовать func index(of element: Element) -> Int?
, но это дает мне ошибку Cannot convert value of type 'String' to expected argument type 'Character'
. Я новичок в Swift, поэтому, если кто-нибудь с большим опытом может предложить альтернативные подходы к этой проблеме, я был бы очень признателен за помощь!