Tự học Swift - Part 1
1. Data type Các kiểu dữ liệu cơ bản trong Swift: Type Typical Bit Width Typical Range Int8 1byte -127 to 127 UInt8 4bytes 0 to 255 Int32 4bytes 0 to 4294967295 UInt32 8bytes -9223372036854775808 to 9223372036854775807 UInt64 4bytes 1.2E-38 to ...
1. Data type
Các kiểu dữ liệu cơ bản trong Swift:
Type | Typical Bit Width | Typical Range |
---|---|---|
Int8 | 1byte | -127 to 127 |
UInt8 | 4bytes | 0 to 255 |
Int32 | 4bytes | 0 to 4294967295 |
UInt32 | 8bytes | -9223372036854775808 to 9223372036854775807 |
UInt64 | 4bytes | 1.2E-38 to 3.4E+38 (~6 digits) |
Double | 8bytes | 2.3E-308 to 1.7E+308 (~15 digits) |
2. Variable
Các cách định nghĩa biến trong Swift:
- var variableName = <initial value> Ví du: var number = 1 hoặc:
- var variableName:<data type> = <optional initial value> Ví dụ: var number:Int = 1 Sự khác nhau giữa var và let: Cùng thử ví dụ sau:
var x = 1 x = 10 #It's ok
let pi = 3.14 pi = 3 #Error
Ở 2 ví dụ trên chúng ta có thể thấy rằng, biến được nghĩa với var có thể thay đổi được giá trị, còn let thì không(constant).
3. 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 x = 42 // x 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.1415 // pi sẽ mang kiểu dữ liệu là Double
4. Tuples
Tuple nhóm nhiều giá trị vào một giá trị phức hợp đơn. Các giá trị trong một bộ có thể thuộc bất kỳ loại nào và không phải cùng kiểu với nhau. Ví dụ: let poem = ("Tôi Yêu Em", "Puskin") Để lấy giá trị trong tuples: let (name, author) = poem Như vậy name sẽ có giá trị là "Tôi Yêu Em"" và author là "Puskin" Chỉ lấy những giá trị trong tuples: var (name, _) = poem
5. Function
Định nghĩa function:
func nameOfFunction(parameters) -> Return Type { // code }
Ví dụ:
func caculateArea(height: Int, awidth: Int) -> Int { return height * awidth; }
Swift cho phép hàm trả về Tuple Ví dụ:
func caculate(height: Int, awidth: Int) -> (area: Int, perimeter: Int) { let area = height * awidth let perimeter = (height + awidth) * 2 return (area, perimeter); }
Default Parameters: Swift cho phép chúng ta định nghĩa giá trị mặc định cho tham số:
func sum(a: Int = 0, _ b: Int = 1) -> Int { let sum = a + b; return sum; }
sum(a: 7) // = 8
In-Out Parameters: Tham số chỉ có thể được thay đổi trong hàm của chính nó, nếu muốn thay đổi giá trị của tham số trong hàm và giá trị đó tồn tại sau khi kết thúc gọi hàm thì ta định nghĩa tham số đó in-out. Để viết một tham số in-out, ta sử dụng từ khoá iout cho biến đó. Ví dụ:
func increase(a: inout Int) -> Void { a = a + 1 } var a = 10 increase(a: &a) print(a) // Kết quả a = 11
6. Optional Chaining
6.1 Optional Trong Swift, khi khởi tạo các biến, các biến này mặc định sẽ được khởi tạo dưới dạng non-optional: tức là phải được gán giá trị mà không được để nil(non-nil). Nếu chúng ta gán giá trị nil cho các biến non-optional này, trình biên dịch sẽ thông báo lỗi.
var string = "This is a string!" string = nil ?? Complile errro
Nếu muốn gán nil cho biến, ta phải sự dụng optional bằng cách đặt dấy "?" sau Data Type của biến. Ví dụ
var string: String? = "This is a string!" string = nil // It's OK
Xét đoạn code sau:
var firstName = "First name" var lastName:String? = nil var fullName = firstName + lastName! // Error
Đoạn code trên sẽ lỗi ngay, vì không thể nào cộng 1 string với nil được. => Lý do để dùng optional là quản lý được nil exception 6.2 Unwrapping optional Để upwrap optional ta đặt '!" sau tên biến. Và khi nào cần upwrap optional: khi chúng ta cần sử dụng biến đó thì bặt buộc phải unwrap optional.
var firstName = "First name" var lastName:String? = "Last name" var fullName = firstName + " "+ lastName! // It's OK