[Diary] Internship at Creative ME Day 2 Swift + Firebase Cloud Firestore
วันนี้ไม่ได้มีอะไรมากมาย เป็นวันปกติ ๆ วันนึงแค่นั้นเอง แต่อยากบอกว่าข้าวแกงก่อนถึงซอยเข้าบริษัทเผ็ดชิบ 5555 แต่ก็รสชาติก็โอเคนะ เอาหละ เข้าเรื่องกันเลยดีกว่า วันนี้ได้ลองเล่นอะไรบ้างนะ
Food Randomiser
วันนี้ก็ลองคิดโปรเจคมาเล่น ๆ อันนึง เอาไว้ฝึกเขียน Swift นั่นก็คืออออ สุ่มเมนูอาหารตามสั่ง อิอิ เคยทำตอนทำโปรเจค Android ตอนปี 2 ตอนนี้ทำแค่ ดึงข้อมูลมาแล้วก็ทำการสุ่มไปเรื่อย ๆ แค่นั้นเอง
Swift Syntax
มาตอนแรกคือปวดหัวเลย 555 มันดูแล้วงงอะ ตอนแรกคิดว่า Kotlin งงละนะ เจอ Swift เข้าไปงงกว่าเดิมอีก ความรู้สึกแบบ จะเข้าใจมันได้ยังไงวะเนี่ย แต่เมื่อเข้าใจแล้ว จริงๆมันก็ไม่ได้ยากอะไร จะงงแค่ตรงที่เป็น Optional variable แค่นั้นเอง การประกาศตัวแปรก็ไม่ยาก มีแค่ 2 แบบ คือ let ใช้ประกาศตัวแปรที่เป็น Constant และ var ใช้ประกาศตัวแปรที่ไม่ใช่ Constant ตัวอย่างเช่น
let x = 0
var y = 0x = 2 // Error
y = 2 // It's OK
และก็จะมีเรื่องการประกาศ function จะใช้ตัวย่อเป็น func แทน ทำให้ไม่ต้องเขียนยาว โครงสร้างก็จะประมาณนี้
//แบบ return type void
func helloWorld() {}//แบบ return type int
func calculate(x: Int, y: Int) -> Int {
return x + y
}
ข้อดีอีกอย่างนึงก็คือ ไม่จำเป็นต้องมี ; เพื่อบอกว่าจบคำสั่งแล้ว แต่บางครั้งก็แอบเผลอใส่ไปเหมือนกัน 5555
Firestore
เจ้า Firestore เนี่ย เป็นฐานข้อมูล NOSQL ที่ Google firebase พึ่งจะออกมาใหม่ได้ไม่นาน ซึ่งตอนนี้ก็ยังคงเป็นเวอร์ชัน BETA อยู่ ในวันนี้เราก็จะมาลองใช้งานเจ้า firestore กัน!!
ก่อนอื่นเลย เราจะติดตั้ง Package ของ firebase ผ่านเจ้า cocoapod หาใครที่ยังไม่มี cocoapod ก็สามารถติดตั้งได้ด้วยคำสั่ง gem install cocoapods
เลย ง่าย ๆ แค่นี้เอง และก็อย่าลืมสร้างโปรเจคใน firebase แล้วเอาไฟล์ GoogleService-Info.plist มาใส่ไว้ในโปรเจคด้วยนะครับ
เมื่อเราสามารถใช้งาน pod ได้แล้วให้เราเปิด Terminal ขึ้นมาแล้ว Change direct ไปที่ Folder ของโปรเจคของเราได้เลย
จากนั้นให้พิมพ์คำสั่ง pod init
เพื่อทำการสร้าง Podfile ขึ้นมา เมื่อเสร็จสิ้นให้เปิดไฟล์ pod ขึ้นมาเราก็จะได้ code ประมาณนี้
ให้เราเพิ่มโค้ดนี้เข้าไปที่บรรทัดที่ 7 นะครับ
pod 'Firebase/Core'
pod 'Firebase/Firestore'
จากนั้นกลับไปที่ Terminal แล้วใช้คำสั่ง pod install เราก็จะได้ package ของ google firebase มาแล้ว จากนั้นให้ปิดโปรเจคที่เปิดอยู่ไปก่อนนะครับ แล้วเปิดโปรเจคอีกครั้งด้วยไฟล์นามสกุล .xcworkspace เช่นของผมก็จะเป็น Kinraidee.xcworkspace
ก็เสร็จสิ้นกันไปสำหรับการติดตั้ง Package นะครับ เรามาลุยโค้ดในส่วนของโปรเจคกันเลยดีกว่าาาาาาา ก่อนเปิดเปิดไฟล์ AppDelegate.swift ก่อนเลย แก้ไฟล์ตามนี้โลด
จากนั้นไปที่ไฟล์ ViewController ตอนนี้ผมจะลองดึงข้อมูลจาก firebase มาลองดูนะครับ ในส่วนนี้ก็ต้อง import Firebase เข้าไปเช่นเดียวกันนะครับ จากนั้นประกาศตั้วแปร db ขึ้นมาเอาไว้ใช้สำหรับการดึงข้อมูลกัน
var db: Firestore!
จากนั้น Initialize firestore ใน viewDidLoad ด้วย
override func viewDidLoad() {
super.viewDidLoad()
// [START setup]
let settings = FirestoreSettings()
Firestore.firestore().settings = settings
// [END setup]
db = Firestore.firestore()
}
ผมได้ลองสร้างข้อมูลไว้ใน firestore เรียบร้อยแล้วตามนี้
เราจะดึงข้อมูลพวกนี้มาโดยเขียนโค้ดตามนี้
db.collection("users").getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())")
}
}
}
เราก็จะเอาข้อมูลพวกนี้ไปใช้ในการสุ่มเมนูอาหารกันต่อไปครับ สำหรับวันนี้ถึงเวลาเลิกงานแล้วเรียบร้อย คงต้องรีบไปหาอะไรกินแล้ว เพราะหิวมากกกกกก อิอิ สำหรับเรื่องความรู้ก็พักไว้เพียงเท่านี้นะครับผม
เย็นแล้วกินอะไรดี
หลักจากเลิกงานเราก็ได้กลับไปที่หอก่อน เพื่อไปว่ายน้ำ (ออกกำลังกาย ลดหุ่นสุดๆ) จากนั้นก็ตกลงกันว่า วันนี้จะไปกินสเต็กเพราะว่าอยากลองมาหลายวันละ แต่ยังไม่ได้มีโอกาสสักที วันนี้เลยจะแวะไปลองชิมสักหน่อย
เมื่อเข้าไปถึงร้านก็จัดการสั่งสเต็กหมูไป 1 ที่ พร้อมกับซอสพริกไทยดำ ไม่นานพนักงานก็นำมาเสริฟ จานที่ผมสั่งหน้าตาก็จะประมาณนี้ ราคาก็ 98 บาท
รสชาติก็โอเคนะครับ แต่มันบดนี่ชอบมาก อร่อยเลยแหละ จากนั้นก็กินกันอิ่มหนำสำราญ ถึงเวลาการจ่ายเงินก็แว๊บไปเห็นว่ามีจ่ายผ่าน Line Rabbit ด้วย แถมได้เงินคืออีกก็เลยจัดเลย วันนั้นคือประหยัดไปประมาณ 20 บาท อิอิ
ก่อนกลับก็ได้แวะซื้อหมูสเต๊ะกลับไปกินด้วย ชุดละ 60 บาท รสชาติอร่อยใช้ได้เลยแหละ สรุปแล้ววันนี้ไช้พลังงานไปเยอะมากก กลับถึงห้องคือเพลีย ง่วงกันตั้งแต่ 4 ทุ่มเลยทีเดียว สำหรับวันนี้ก็มีเพียงเท่านี้ ถือว่าเป็นอีกวันที่เหนื่อยมากๆเลย