Saya mencoba mendapatkan indeks elemen yang terdapat dalam kelas tertentu yang cocok dengan variabel global. Mencari node dengan kueri CSS memberi saya daftar dengan elemen potensial yang cocok, tetapi — sebagai dokumentasi Kanna menunjukkan — kueri seperti itu mengembalikan XPathObjects
yang bertindak sebagai array. Satu-satunya cara saya bisa mendapatkan nilai indeks dari daftar tersebut adalah dengan mengubahnya dari array menjadi string, yang kemudian dapat dibagi dengan baris baru; namun, sepertinya saya tidak bisa membuat daftar tersebut mengambil nilai string. Bagian yang relevan dari log sesi kompilasi tipikal adalah sebagai berikut:
Kazuo®/Ishiguro® Auprès® (2 pack)
Orange
Kazuo®/Ishiguro® Auprès® Folio Toujours (2 Pack)
Blue
…
Saya sudah mencoba tiga metode yang disarankan oleh satu poster di utas ini untuk menggabungkan keluaran di atas:
1). komponenSeparatedByCharactersInSet
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}
}
Idealnya, ini akan mencetak [Kazuo®/Ishiguro® Auprès® (2 pack), Orange, Kazuo®/Ishiguro® Auprès® Folio Toujours (2 Pack), Blue]
; itu malah menimbulkan kesalahan. Mengklik fix
menyebabkan kesalahan lain — dan kesalahan lainnya.
2). membelah
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)
}
Menghasilkan hasil yang sama seperti componentsSeparatedByCharactersInSet
: Cannot call value of non-function type 'CharacterSet'
-> fix
-> error -> fix
-> error.
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)
}
}
Solusi ini sebenarnya dibuat, tetapi mengembalikan setiap item daftar sebagai function()
.
Metode ini berfungsi ketika saya mencobanya pada literal string multi-baris sederhana di Playgrounds, tetapi karena alasan tertentu metode tersebut tidak berfungsi pada keluaran di atas. Cara termudah untuk mengatasi masalah ini adalah dengan menggunakan func index(of element: Element) -> Int?
, tetapi hal itu memberi saya kesalahan Cannot convert value of type 'String' to expected argument type 'Character'
. Saya baru mengenal Swift, jadi jika ada orang yang lebih berpengalaman dapat menyarankan pendekatan alternatif untuk masalah ini, saya akan sangat menghargai bantuannya!