Posts

Showing posts with the label substring

Swift Substrings

Image
มาว่ากันเรื่อง 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...

[iOS Dev] Matching substring with Regular Expression

Image
Regular Expression คือ String ที่ไว้ใช้อธิบายรูปแบบของข้อความที่เรากำหนด ซึ่งสามารถอ่านรายละเอียดเกี่ยวกับ Regular Expression กับ Format ได้ที่นี่ครับ http://en.wikipedia.org/wiki/Regular_expression http://www.regular-expressions.info ใน Entry นี้เราจะมาดูประโยชน์ที่ใช้กันอย่างแพร่หลายของ Regular Expression นั่นคือ การทำ String Matching ซึ่งสามารถใช้ได้ในหลายลักษณะ เช่น “ให้ผู้ใช้ใส่ Email ตาม format ที่เราต้องการ” => “[a-zA-Z0-9_]+@[a-zA-Z0-9_]+.[a-z]{2-4}” “ใส่ชื่อตาม format ที่กำหนดไว้” => “[a-zA-Z]+” ง่ายๆ คือพวก Web Developer ทั้งหลายจะใช้ในการ validate form ต่างๆ น่ะครับ :) แต่ตัวอย่างที่จะใช้ในวันนี้คือ การหา # (hashtag) ในข้อความ ซึ่งสามารถนำไปประยุกต์ใช้ในการค้นหา Substring รูปแบบต่างๆ ที่เราต้องการ ใน String ได้ โดย Cocoa นั้นก็มี Class NSRegularExpression ให้ใช้ได้ไม่ยากนัก :) NSRegularExpression Reference แต่จะเห็นได้ว่า format แบบนี้จะ Detect ภาษาไทยไม่ได้ ผมก็ได้ค้นหาไปเจอ Blog ของพี่คนหนึ่งใน Twitter @pokpitch ซึ่งสามารถทำได้ 2 แบบนั่...