ฉันกำลังแบ่งอาร์เรย์ของสตริงและตั้งค่าเป็น[String]
ตัวแปร แต่ตัวตรวจสอบประเภทกำลังบ่น มันเป็นข้อผิดพลาดของคอมไพเลอร์หรือไม่?
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]
คำตอบ:
การสมัครสมาชิกอาร์เรย์ด้วยช่วงจะไม่ส่งคืนอาร์เรย์ แต่เป็นการแบ่งส่วน คุณสามารถสร้างอาร์เรย์จากส่วนนั้นได้
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: Slice<String> = tags[1..<3]
var someTagsArray: [String] = Array(someTags)
var someTags = tags[1..<3] var someTagsArray: [String] = someTags
จะช่วยให้คุณมีประโยชน์มากขึ้นerror: 'Slice<String>' is not convertible to '[String]'
var tags = ["this", "is", "cool"]
var someTags: [String] = Array(tags[1..<3])
println("someTags: \(someTags)") // "someTags: [is, cool]"
อีกวิธีหนึ่งในการทำเช่นนั้นในที่เดียวคือรวมการประกาศตัวแปรlet someTags: [String]
และmap(_:)
จะเปลี่ยนArraySlice<String>
เป็น[String]
:
let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]
อีกวิธีที่สะดวกในการแปลงArraySlice
ไปArray
นี้คือ:
var tags = ["this", "is", "cool"]
var someTags: [String] = tags[1..<3] + []
มันไม่สมบูรณ์แบบเพราะนักพัฒนาคนอื่น (หรือตัวคุณเอง) ที่ดูทีหลังอาจไม่เข้าใจจุดประสงค์ของมัน ข่าวดีก็คือหากนักพัฒนารายนั้น (อาจเป็นคุณ) ลบออก+ []
พวกเขาจะพบกับข้อผิดพลาดของคอมไพเลอร์ทันทีซึ่งหวังว่าจะชี้แจงวัตถุประสงค์ของมัน
เพียงแค่โยนชิ้นส่วนเป็นอาร์เรย์เมื่อสร้างขึ้น ทำให้ Array ของคุณเป็นอาร์เรย์โดยไม่ต้องใช้ตัวแปรกลาง ใช้งานได้ดีเมื่อใช้ประเภท Codable
var tags = ["this", "is", "cool"]
tags = Array(tags[1..<3])
Slice
เอกสารได้ที่ไหน? นอกจากนี้ข้อความแสดงข้อผิดพลาดยังไม่ถูกต้องและSlice
แสดงเป็น [String] ในสนามเด็กเล่น ดังนั้นจึงดูเหมือนว่ามีข้อผิดพลาดของคอมไพเลอร์สองรายการและเอกสารที่ขาดหายไป