Các Keyword cơ bản trong lập trình Swift
Hôm nay mình xin viết một phần về một số từ khoá cơ bản trong lập trình Swift. Ở phần này mình sẽ viết về các keywords liên quan tới việc khai báo hàm, thuộc tính, lớp ... Declaration Keywords let let: định nghĩa 1 biến bằng let là sau này không có thay đổi giá trị nó được đó. let ...
Hôm nay mình xin viết một phần về một số từ khoá cơ bản trong lập trình Swift. Ở phần này mình sẽ viết về các keywords liên quan tới việc khai báo hàm, thuộc tính, lớp ...
Declaration Keywords
let
let: định nghĩa 1 biến bằng let là sau này không có thay đổi giá trị nó được đó.
let constantString: String = "Khong the thay doi gia tri duoc" constantString = "String moi" // Báo lỗi
var
var: định nghĩa 1 biến có thể thay đổi được giá trị.
var number: Int = 1 number = 2
func
func: cho phép khai báo 1 phương thức, chứa một khối lệnh nhằm làm một nhiệm vụ nào đó.
func addNumbers(num1: Int, num2: Int) -> Int { return num1 + num2 }
import :
import: cho phép nhúng 1 framework hoặc 1 module khác vào trong module hiện có.
import UIKit / /Tất cả các hàm trong UIKit đều có thể dùng trong file khai báo class Foo {}
init
init: là quá trình chuẩn bị một instance của class, struct, hoặc enum để sử dụng.
class Person { init() { //Set default values, prep for use, etc. } }
deinit
deitnit: được gọi ngay khi instance của 1 class được giải phóng vùng nhớ trong vùng nhớ heap (deallocated).
class Person { var name: String var age: Int var gender: String deinit { // Deallocated } }
associatedtype:
associatedtype: cho phép tạo 1 tên bất kỳ cho 1 loại biến trong khai báo của 1 protocol. Biến này được qui định là loại nào khi protocol đó được adopt.
protocol Add { associatedtype NumberType } class Math: Add { typealias NumberType = Int //Có thể là kiểu khác ở đây (Double, Float, ...) }
typealias
typealias: cho phép đặt 1 tên khác của 1 kiểu sẵn có.
typealias JSONDictionary = [String: AnyObject] func parseJSON(_ deserializedData: JSONDictionary) { }
extension
extension: cho phép mở rộng thêm hàm từ 1 class hoặc struct hoặc enum hoặc protocol.
class Person { var name: String = "" var age: Int = 0 var gender: String = "" } extension Person { func printInfo() { print("My name is (name), I'm (age) years old and I'm a (gender).") } }
inout
inout: Tham số chỉ tồn tại trong phạm vi của hàm, nên sử dụng inout sẽ giúp thay đổi giá trị của một tham số của hàm và sự thay đổi đó vẫn còn khi hàm kết thúc. Khi gọi hàm phải đặt dấu (&) ngay trước tên biến để cho trình biên dịch biết biến đó có thể thay dổi trong hàm.
func swapInts(inout a: Int, inout _ b:Int) { let temp = a a = b b = temp } var wifeMoney: Int = 0 var myMoney: Int = 1000 print(wifeMoney) // 0 print(myMoney) // 1000 // Tới cuối tháng. swapInts(&myMoney, &wifeMoney) print(wifeMoney) // 1000 print(myMoney) // 0
internal
internal: Một access control cho phép sử dụng trong 1 module, không ghi gì thì mặc định là internal.
class Person { internal var jobTitle:String = "" } let aPerson = Person() aPerson.jobTitle = "This can set anywhere in the application"
open
open: Một access control cho phép object được sử dụng ở ngoài module khác . Thường viết bằng open khi tạo ra các framework.
open var foo: String?
operator
operator: các toán tử cho phép chúng ta kiểm tra, thay đổi hoặc kết hợp các giá trị lại với nhau.
let number1 = 10 let number2 = -number1 let number3 = 5 + 3 // "các toán tử kết hợp, liên kết các giá trị với nhau." if myGirlFriend.isBeautiful && myGirlFriend.isIntelligent && myGirlFriend.isRich { // "Nhân vô thập toàn, thế nên bạn gái nào mà xinh đẹp, thông minh, giàu có // thì chắc chắn sẽ không có được tôi :]] ." } else { //... } // "Toán tử 3 ngôi giúp code ngắn hơn." let checkNumber3_IsOdd = (number3 % 2 == 0) ? false : true
private
private: Một access control cho phép chỉ xài trong 1 scope.
class Person { private var jobTitle = "" } extension Person { func printJobTitle() { print("My job is (jobTitle)") // Chỗ này sẽ compile lỗi } }
fileprivate
fileprivate: là 1 access control giới hạn trong 1 file, thường dùng cho extension.
class Person { fileprivate var jobTitle:String = "" } extension Person { func printJobTitle() { print("My job is (jobTitle)") // nếu mà khai báo bằng private là compiler báo lỗi } }
protocol
protocol: định nghĩa các giao thức, class, struct hay enum mà adopt procotol này thì phải theo chuẩn của nó.
protocol Blog { var wordCount: Int { get set } func printReaderStats() } class TTIDGPost: Blog { var wordCount:Int init(wordCount:Int) { self.wordCount = wordCount } func printReaderStats() { //Print out some stats on the post } }
public
public: Một access control cho phép object sử dụng ở tất cả các file trong cùng 1 module.
public var foo:String? //This can be overriden and accessible anywhere inside of the app, but not outside of it.
static
static: biến nào mà được định nghĩa bằng từ khoá static thì nó tồn tại suốt trong 1 chương trình và không bị huỷ, ngoài ra sử dụng static thì ta có thể thao tác biến hoặc hàm bằng class hoặc struct hoặc enum đó luôn.
class Person { var jobTitle: String? static func assignRandomName(_ aPerson: Person) { aPerson.jobTitle = "Some random job" } } let somePerson = Person() Person.assignRandomName(somePerson) //somePerson.jobTitle is now "Some random job"
class
class: Dùng để tạo ra lớp là một nhóm các đối tượng mà có các thuộc tính chung. Nó có 1 số điểm khác với struct như sau:
- Có thể kế thừa các thuộc tính và tình năng từ một class khác.
- Có thể ép kiểu về class mà nó kế thừa.
- Có thể giải phóng tài nguyên khi nó không còn sử dụng nữa.
- Có thể có nhiều tham chiếu tới một class đã được khỏi tạo.
class Person { var name: String var age: Int var gender: String }
struct
struct: cũng là thành phần không thể thiếu trong mọi ứng dụng như class, chúng giúp chúng ta tổ chức và quản lý code thành những khối, nó có 1 số điểm khác class như sau:
- Không có tính kế thừa.
- Là kiểu tham trị.
- Không có tính huỷ.
struct Person { var name: String var age: Int var gender: String }
enum
enum: Định nghĩa một nhóm các phần tử có liên quan và được liệt kê sẵn.
enum Gender { case male case female }
subscript
subscript: cho phép truy xuất đến 1 thành viên nằm trong một collection, list hoặc sequence.
var postMetrics = ["Likes":422, "ReadPercentage":0.58, "Views":3409] let postLikes = postMetrics["Likes"]