ฉันกำลังพยายามรับดัชนีขององค์ประกอบที่มีอยู่ในคลาสหนึ่งที่ตรงกับตัวแปรโกลบอล การค้นหาโหนดที่มีการสืบค้น CSS ทำให้ฉันมีรายการที่มีองค์ประกอบที่ตรงกัน แต่ - ใน เอกสารประกอบของ Kanna ชี้ให้เห็น — ข้อความค้นหาดังกล่าวส่งคืน 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). แจกแจงLines
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 ดังนั้นหากใครก็ตามที่มีประสบการณ์มากกว่านี้สามารถแนะนำแนวทางอื่นในการแก้ไขปัญหานี้ได้ ฉันจะขอบคุณมากสำหรับความช่วยเหลือ!