Tìm hiểu các loại keyword trong Swift:

- Keyword khai báo

- Keyword trong statements

- Loại keyword với biểu thức

- Keyword sử dụng #, @

- Keyword với context

Keywords in Statements

break : kết thúc chương trình trong loop, if hoặc switch

for idx in 0...3
{
    if idx % 2 == 0
    {
        break
    }
}

case : một trường hợp trong câu lệnh switch.

let box = 1
switch box
{
case 0:
    print("Box equals 0")
case 1:
    print("Box equals 1")
default:
    print("Box doesn't equal 0 or 1")
}

continue : trong vòng lặp nếu gặp continue thì nó sẽ bỏ qua trường hợp đó (ở đây trong câu lệnh if) rồi tiếp tục duyệt tiếp.

for idx in 0...3
{
    if idx % 2 == 0
    {
        continue // Thoát khúc này thôi
    }
    
    print("This code never fires on even numbers") // Vẫn in ra nhé
}

default : xét case từ trên xuống mà ko thấy cái nào dính thì bay vào default.

let box = 1
switch box
{
case 0:
    print("Box equals 0")
case 1:
    print("Box equals 1")
default:
    print("Covers any scenario that doesn't get addressed above.")
}

defer : sử dụng khi muốn đảm bảo thực thi 1 đoạn code nào đó ngay khi hàm kết thúc.

func test()
{
    defer
    {
        print("2") // print sau
    }
    print("1") // print trước
}

do : thực thi đoạn chương trình nào đó có khả năng xảy ra lỗi .

do
{
    try expression
    //statements
}
catch someError ex
{
    //Handle error
}

else : Nếu không phải thằng A thì là thằng B thôi.

if val > 1
{
    print("val is greater than 1")
}
else
{
    print("val is not greater than 1")
}

fallthrough : xét trên xuống, nếu khớp 1 case nào đó vẫn tiếp tục xét tiếp 1 case liền kề

let box = 0
switch box
{
case 0:
    print(0) // In ra 0
    fallthrough
case 1:
    print(1) // In ra 1
case 2:
    print(2) // Không có được in ra 
default:
    print("default")
}

for : giúp lặp các phần tử trong 1 sequence hoặc array hoặc các kí tự trong 1 String.

for _ in 0..<3 { 
      print ("This prints 3 times") 
}

guard : đảm bảo điều kiện nào đó đúng, vừa có thể unwrap biến optional. Thật ra xài if let cũng được, nhưng xài guard đỡ phải lồng vào trong 1 scope nhìn rối mắt.

private func printRecordFromLastName(userLastName: String?) 
{
    guard let name = userLastName, userLastName != "Null" else
    {
        //Sorry Bill Null, find a new job
        return
    }//Party on
    print(dataStore.findByLastName(name))
}

if : đảm bảo 1 hoặc nhiều điều kiện đúng khi thực hiện 1 hoặc nhiều câu lệnh nào đó.

if 1 > 2
{
    print("This will never execute")
}

repeat : Thực thi đoạn chương trình ít nhất 1 lần trước khi lặp qua điều kiện

repeat
{
    print("Always executes at least once before the condition is considered")
}
while 1 > 2

return : thoát khỏi hàm luôn, và có thể trả về giá trị nào đó tuỳ chúng ta khai báo.

func doNothing()
{
    return //Immediately leaves the contextlet anInt = 0
    print("This never prints \(anInt)")
}

func returnName() -> String?
{
    return self.userName //Returns the value of userName
}

switch : xét và so sánh giá trị xem nó match với case nào, hoặc thích thì dùng if + else if + else.

let box = 1
switch box
{
case 0:
    print("Box equals 0")
    fallthrough
case 1:
    print("Box equals 0 or 1")
default:
    print("Box doesn't equal 0 or 1")
}

where : dùng để ghép với for kiểm tra xem có đúng điều kiện không, hoặc dùng cho 1 loại generic type phải conform đúng protocol nào đó.

protocol Nameable{
    var name: String {get set}
}

func createdFormattedName<T: Nameable>(_ namedEntity: T) -> String where T: Equatable{
    // Chỉ có thực thể nào mà vừa conform Nameable và Equatable thì mới dùng được hàm này
    return "This things name is " + namedEntity.name
}

for i in 0…3 where i % 2 == 0{
    print(i) //Prints 0 and 2
}

while : loop điều kiện nào đó cho tới khi nó sai thì thôi.

while foo != bar {
    print("Keeps going until the foo == bar")
}