Cơ bản với Swift Phần 3
swift
71
White

Phạm Quốc Thắng viết ngày 13/12/2015

Các bạn chưa xem phần 1, 2 có thể tham khảo:
Phần 1
Phần 2

Phần 3 bao gồm:

  • Optionals
  • Kiểm soát lỗi (Error Handling)
  • Gỡ rối (Debugging with Assertions)

Optionals

Sở dĩ mình để nguyên Optionals là vì mình cũng không biết phải dịch làm sao cho dễ hiểu mà không mất đi ý nghĩa của nó. Vì thế các bạn chịu khó xem ví dụ bên dưới để hình dung :smile:

let strNumber = "123"
let number = Int(strNumber)

Đoạn code trên dùng để convert String sang Int. Tuy nhiên, nếu String kia không phải là 123, mà là "hello kipalog" thì sao? Ở một số ngôn ngữ khác, đặc biệt là C# 5 trở xuống sẽ báo lỗi. Còn C# 6 thì có kiểu Int?. Swift cũng tương tự như vậy!

let strNumber = "123aaa"
let number = Int(strNumber)

Lúc này number sẽ mang kiểu Int? và vì strNumber không phải 1 số, nên number sẽ mang giá trị nil (null ấy)

nil
nil cũng là null trong các ngôn ngữ lập trình khác, và hiển nhiên. Mặc định bạn khai báo một biến nào đó mà không có giá trị, Swift sẽ tự gán cho biến đó giá trị nil

Optionals Binding

if let actualNumber = Int(possibleNumber) {
    print("\'\(possibleNumber)\' mang giá trị là \(actualNumber)")
} else {
    print("\'\(possibleNumber)\' không thể ép kiểu sang số nguyên")
}

Đoạn code trên có thể hiểu đơn giản thế này.
"Nếu actualNumber nhận giá trị nào đó khác nil thì in ra giá trị của nó và ngược lại. Khi không thể ép kiểu qua string thì actualNumber sẽ mang giá trị nil và khi đó in ra ..."

Implicitly Unwrapped Optionals
Bên trên mình có nói đến việc kiểu Int? thì sẽ trả về nil khi không thể ép kiểu được. Vậy nếu muốn gán một biến/hằng kiểu Int bằng một biến/hằng kiểu Int? hay String bằng String? thì sao?

    let possibleString: String? = "An optional string."
    let forcedString: String = possibleString! // Yêu cầu có dấu chấm than ở cuối

    let assumedString: String! = "An implicitly unwrapped optional string."
    let implicitString: String = assumedString // Không yêu cầu dấu chấm than

Dấu chấm than (!) đóng vai trò như khẳng định. Nghĩa là bắt buộc phải gán 1 giá trị cho biến/hằng ngay khi nó được khởi tạo.
Dấu chấm hỏi (?) thì không yêu cầu phải gán giá trị khi khởi tạo.
Cả 2 đều giống nhau ở điểm là có thể chứa được giá trị nil

let assumedString: String = nil // lỗi, phải dùng String? hoặc String!
let assumedString2: String = "" // chạy ok

Kiểm soát lỗi (Error Handling)

Tương tự như các ngôn ngữ khác, Swift cũng có throws / try-catch để bẫy lỗi, kiểm soát lỗi.
Ví dụ:

func canThrowAnError() throws {
    // function này có thể có hoặc không có lỗi
}

Hoặc bạn cũng có thể bẫy lỗi rồi xuất ra màn hình hay lưu log ở đâu đó bằng cách dùng try-catch
Ví dụ:

    do {
        try canThrowAnError()

    } catch {

    }

Bạn có thể tìm hiểu chi tiết hơn về Error Handling tại website của apple. Error Handling

Debugging with Assertions

Assertions trong Swfit đóng vai trò như là một trigger, nó sẽ tự động kiểm tra dữ liệu đầu vào và thông báo. Cách khai báo Assertion như sau:

assert(biểu thức toán tử trả về kiểu bool, thông báo xuất ra khi toán tử trả về false)

let age = -3
assert(age >= 0, "Tuổi của một người không thể nhỏ hơn 0")

Nguồn dịch từ: The Swift Programming Language

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Phạm Quốc Thắng

15 bài viết.
45 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
22 33
Chuẩn bị Một link bài hát / video từ mp3.zing.vn Nghịch ngợm Cũng vì dạo này mình hơi rảnh rỗi với có một chút phiền phức khi đang thưởng thức ...
Phạm Quốc Thắng viết gần 3 năm trước
22 33
White
10 1
Bài viết này mình sẽ trình bày những thứ cơ bản về cú pháp với Swift. Bài viết sẽ gồm các phần Phần 1 Hằng và Biến Ghi chú Dấu chấm phẩy S...
Phạm Quốc Thắng viết gần 3 năm trước
10 1
White
7 1
Disclaimer: Mình đã thông báo bug này cho support tenlua.vn 2 lần, và họ đã fix bằng cách upgrade 1 bản api ver 2, tuy nhiên api ver 1 vẫn hoạt độn...
Phạm Quốc Thắng viết gần 3 năm trước
7 1
Bài viết liên quan
White
11 4
(Link) (Link) (Link) Ở 2 phần tut trước, mình đã hướng dẫn khá chi tiết cách viết một ứng dụng camera có tích hợp chức năng nhận diện khuôn mặ...
HoangPH viết hơn 3 năm trước
11 4
Male avatar
0 0
RxSwift: Bài 6: RxCocoa (Part 4) Units ===== Updated ngày 30/06 Updated một chút: Vì những bất tiện và không rõ ràng về thông tin của kipalog, mì...
Bùi Khánh Duy viết 9 tháng trước
0 0
White
2 0
Có nhiều cách viết blog công nghệ hơn là làm bánh hay làm tình. Những ngày này Hà Nội mưa liên miên, được cái mát giời, mình lại tức cảnh sinh tìn...
VietHQ viết hơn 1 năm trước
2 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
15 bài viết.
45 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!