[iOS Dev] Fast Enumerator in Objective-C
จะเรียกว่าอะไรดีล่ะ ผมก็พึ่งรู้วันนี้จาก อาจารย์ท่านนึงของผม ^^
เค้ามา Comment Blog ผม ก็เลยหยิบมาเขียนซะเลย อิอิ
ผมเรียกว่ามันเป็น "ชุดคำสั่งพิเศษ" แล้วกัน อิอิ
นี่คือ Array ที่ว่าซึ่งเก้บข้อมูลเป็น String ทั้งหมด 6 ตัว
ส่วนใหญ่แล้วเวลาเราจะแสดงข้อมูลใน Array เราทำแบบนี้กันใช่มั้ยครับ ??
เปลี่ยนเป็นเรามาใช้ Fast Enumerator ดีกว่าครับ
โดยมีโครงสร้างคือ...
for(ObjectType *object in ContainerObject) {
// do something with object
}
Example ::
ซึ่งมาสารถเขียนได้เหมือนกัน ^^ ผลลัพธ์เหมือนกัน
แล้วแต่คนชอบนะครับ อิอิ
ตอนแรกผมก็เขียนแบบแรกมาตลอด พอมาเจอแบบนี้ มันก็เท่ดีครับ ^^
ขอบคุณเทคนิคจาก
@rawitat
http://www.rawitat.com
เค้ามา Comment Blog ผม ก็เลยหยิบมาเขียนซะเลย อิอิ
ผมเรียกว่ามันเป็น "ชุดคำสั่งพิเศษ" แล้วกัน อิอิ
นี่คือ Array ที่ว่าซึ่งเก้บข้อมูลเป็น String ทั้งหมด 6 ตัว
ส่วนใหญ่แล้วเวลาเราจะแสดงข้อมูลใน Array เราทำแบบนี้กันใช่มั้ยครับ ??
เปลี่ยนเป็นเรามาใช้ Fast Enumerator ดีกว่าครับ
โดยมีโครงสร้างคือ...
for(ObjectType *object in ContainerObject) {
// do something with object
}
Example ::
แล้วแต่คนชอบนะครับ อิอิ
ตอนแรกผมก็เขียนแบบแรกมาตลอด พอมาเจอแบบนี้ มันก็เท่ดีครับ ^^
ขอบคุณเทคนิคจาก
@rawitat
http://www.rawitat.com
เพิ่งอ่านเห็นบทความนี้ ... มันไม่เหมือนกันซะทีเดียวน่ะสิน้อง
ReplyDeleteกรณีแรกเป็นกรณี "การไล่สมาชิกตาม index ของ array"
กรณีหลังเป็นกรณี "ให้ container โยนวัตถุออกมาทีละตัวตามลำดับ"
ซึ่งในกรณี array มัน "บังเอิญเป็นตัวถัดไปตามลำดับการอ้างอิง" น่ะ มันเลยได้ผลเหมือนกัน
ถ้าไปใช้กับพวก set, dictionary ที่มันไม่มี order ล่ะ? จะไล่ index กันยังไง แต่ว่า enumeration ก็ยังใช้ได้เหมือนเดิม
เพราะว่ามันเป็นการ "ให้ container โยนวัตถุตัวต่อไปออกมา"
คือ จริงๆ แล้วมันจะเทียบเท่ากับ code นี้ (ในเชิงความหมาย ไม่ใช่เชิงประสิทธิภาพ) มากกว่า
NSEnumerator *enumerator = [array objectEnumerator];
id object; // อาจเปลี่ยนเป็น static type เช่น NSString *object ก็ได้
while( (object = [enumerator nextObject]) ) {
// ทำอะไรบางอย่างกับ object
}
นอกจาก objectEnumerator แล้วมันยังมีอีกหลายตัว เช่น reverseObjectRnumerator หรือว่าจะ subclass NSEnumerator เองก็ได้