Cơ bản với Swift Phần 2
swift
68
White

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

Swift Basic

Tiếp theo với Cơ bản với Swift Phần 1
Phần 2 bao gồm:

  • Type Safety và Type Inference
  • Cách viết số (Numeric Literals)
  • Bí danh kiểu dữ liệu (Type Aliases)
  • Kiểu Bool
  • Tuples

Type Safety và Type Inference

Swift là một ngôn ngữ hỗ trợ kiểu an toàn (Type Safe, bắt đầu từ đây mình ghi Type Safe luôn vì dịch ra sẽ không sát và không hay lắm). Vì thế một ngôn ngữ Type Safe luôn khuyến khích bạn chỉ ra rõ ràng là bạn đang làm việc với kiểu dữ liệu nào. Ví dụ như một đoạn code bạn đang xử lí kiểu chuỗi (string), thì bạn sẽ không thể coi nó như là 1 số nguyên (int) được.

Vì Swift là một ngôn ngữ Type Safe, vì thế complier sẽ tự động kiểm tra kiểu dữ liệu và bắt lỗi giúp bạn. Điều đó sẽ giúp bạn dễ dàng hơn trong việc fix những lỗi này ngay trong thời gian đang phát triển.

Vì complier sẽ kiểm tra kiểu dữ liệu ở các biến cũng như hằng khi bạn gán một kiểu dữ liệu khác với kiểu dữ liệu mà biến / hằng đang lưu trữ và sẽ báo lỗi. Nếu trong lúc khai báo biến / hằng, bạn không định nghĩa trước biến / hằng đó chứa kiểu dữ liệu gì, thì Swift sẽ sử dụng Type Inference để tự động định nghĩa giúp bạn từ dữ liệu ban đầu mà bạn gán cho nó.
Ví dụ

    let meaningOfLife = 42
    // meaningOfLife sẽ mang kiểu Int

Tuy nhiên, có một lưu ý nho nhỏ là Swift ưu tiên sử dụng kiểu Double hơn là kiểu Float
Ví dụ

let pi = 3.14159
// pi sẽ mang kiểu dữ liệu là Double

Cách viết số (Numeric Literals)

  • Với số kiểu decimal, có thể viết dưới dạng không có tiền tố (prefix)
  • Với kiểu binary, tiền tố sẽ là 0b
  • Với kiểu octal, tiền tố sẽ là 0o
  • Với kiểu hexadecimal, tiền tố sẽ là 0x

Tất cả các số dưới đây đều có giá trị 17 ở kiểu decimal

let decimalInteger = 17
let binaryInteger = 0b10001     
let octalInteger = 0o21       
let hexadecimalInteger = 0x11  

Ngoài ra, với số mũ ở dạng decimal. Bạn có thể viết như sau:
1.25e2 có nghĩa là 1.25 * 10^2 = 125.0
1.25e-2 có nghĩa là 1.25 * 10^-2 = 0.0125

Tương tự với hexadecimal
0xFp2 có nghĩa là 15 * 2^2 = 60
0xFp-2 có nghĩa là 15 * 2^-2 = 3.75

Chuyển đổi số nguyên
Các bạn xem ví dụ dưới đây:

 let cannotBeNegative: UInt8 = -1
 // Kiểu Unit8 không thể chứa số âm, vì thế sẽ báo lỗi ở đây
 let tooBig: Int8 = Int8.max + 1
 // Tương tự ở đây với kiểu Int8 không thể chứa 1 số lớn hơn kiểu dữ liệu mà nó cho phép
 // Và vì thế cũng sẽ báo lỗi

Vậy để chứa 1 số lớn hơn kiểu dữ liệu hiện tại khi cộng 2 số thì sao?
Có thể làm như sau:

let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)

Đó là lợi dụng Type Inference của Swift, ta chuyển 2 số cần cộng lại về cùng 1 kiểu dữ liệu, như ở trên là UInt16. Sau đó tạo 1 hằng(biến) mới để cộng lại. Khi đó, Swift sẽ hiểu là kiểu dữ liệu của hằng(biến) mới sẽ mang kiểu dữ liệu nào để phù hợp với kết quả của phép cộng.

Chuyển đổi số nguyên và số thập phân
Các bạn xem ví dụ bên dưới
Ví dụ:

let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi sẽ mang giá trị 3.14159, và kiểu dữ liệu sẽ là Double

Hoặc ta có thể lấy phần nguyên của 1 số thập phân tương tự như trong C như sau:

let IntPi = Int(3.14159)
// IntPi mang giá trị là 3 và kiểu Int

Bí danh kiểu dữ liệu (Type Aliases)

Type Aliases sẽ là một tên bí danh cho một kiểu dữ liệu hiện tại. Hiểu đơn giản là đặt một cái tên khác cho một kiểu dữ liệu đang có.

typealias DayLaKieuInt32 = UInt32

Đơn giản vậy thôi :smile: lâu lâu đặt tên một kiểu dữ liệu nào đó bá đạo để giải trí cũng được đấy chứ.

Kiểu Bool

Kiểu Bool này đã quá quen thuộc với tất cả mọi developer rồi nhỉ, kiểu bool sẽ mang giá trị là true hoặc false.
Tuy nhiên, Swift hơi khó tính 1 chút, không có dễ dãi giống như trong C. Bạn có thể xem ví dụ bên dưới để xem nó khó tính kiểu gì nhé.

let PQT_Handsome = true
if PQT_Handsome
{
    print ("PQT Handsome")
}
//Mọi thứ hoạt động tốt, không có error, không warning

Tuy nhiên

let PQT_Handsome = 1
if PQT_Handsome
{
    // Complier sẽ báo lỗi ngay lập tức, hơi khó tính nhỉ :(
}
// Nhưng có thể làm như sau
if PQT_Handsome == 1
{
    // Ồ, mọi thứ ok rồi
}

Tuples

Đây là một điểm khá hay ở Swift, Tuples sẽ giúp bạn trả về 2 hay nhiều thứ từ một hàm, điểm này mình nghĩ một số ngôn ngữ khác nên học tập :smile:
Ví dụ:

let TenTuoiNghe = ("Pham Quoc Thang", 18, "Sinh Vien")
// TenTuoiNghe sẽ mang kiểu dữ liệu (String, Int, String)

Để lấy dữ liệu bạn cần từ Tuples trên, bạn có thể làm như sau.

let TenTuoiNghe = ("Pham Quoc Thang", 18, "Sinh Vien")
let (Ten, Tuoi, Nghe) = TenTuoiNghe

Hoặc nếu muốn lấy 1 hay vài thứ từ Tuples trên, còn lại không quan tâm thì có thể làm như sau

let TenTuoiNghe = ("Pham Quoc Thang", 18, "Sinh Vien")
let (Ten, _, _) = TenTuoiNghe
// Ten sẽ mang giá trị Pham Quoc Thang và còn lại thì bỏ qua hết

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.
44 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 hơn 2 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 hơn 2 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 hơn 2 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 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 5 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 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.
44 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á!