Swift Substrings

มาว่ากันเรื่อง Substrings กัน ใครเคยเขียน Objective-C มาคงไม่มีปัญหาอะไรกันมาก เพราะการใช้ NSRange ไม่ใช่เรื่องยากเลย เวลาเราจะดึง Substring สักชุดออกมาจาก String นั้น เขียนแค่ แต่ใน Swift นั้นจะต่างกันโดยสิ้นเชิง เพราะ ภาษาที่มีลักษณะเป็นภาษาสคริปท์ นั้น จะออกแบบมาให้ใช้ระบบ Range แบบนี้ซะเป็นส่วนใหญ่ โดยถ้าเขียนให้ได้ผลลัพธ์เดียวกันใน Swift จะต้องเขียนแบบนี้ โดยฟังก์ชั่นที่ชื่อว่า advance ก็จะทำหน้านี้คล้ายๆ กับ NSMakeRange() ด้านบนนั่นแหละ จะเรียกว่าเหมือนเลยก็ได้ แต่ใครหลายคน (รวมทั้งผม) ที่เคยเขียนภาษาอย่าง Python, Ruby มา ก็อาจจะงงว่า ทำไมไม่ใช่ Int ไปตรงๆ เลยล่ะ จะได้ง่ายดีเช่น เช่น text[2..<4] อะไรแบบนี้ พอเราเข้าไปดูลึกๆ นั้น Ranges บน Swift ถูกออกแบบมาอย่างดีเลย เพราะมันมี extension บน String class ซึ่งประกาศ struct ที่ชื่อว่า Index และแสดงในอีกชื่อคือ String.Index ซึ่งถูกเขียนให้ conform โปรโตคอลที่ชื่อว่า BidirectionalIndexType เพื่อให้ทำการวนซ้ำภายใน String ได้ นอกจากนั้นฟังก์ชั่น advance มีการจะต้องรับค่าตัวแปรที่ conform โปรโตคอลที่ชื่อว่า Forwar...