Tuple trong Swift
Một Tuple
là một nhóm các giá trị gom lại thành một (có thể coi như một tập hợp, danh sách), kiểu của Tuple căn cứ vào vào danh sách các phần tử cách nhau bởi dấu ,
(phảy), các phần tử trong Tuple được bao bọc trong ký hiệu ()
Ví dụ như thông tin của một người có thể viết là ("XuanThuLab", 20)
để biểu diễn dữ liệu Tên và Tuổi. Để truy cập phần tử dữ liệu thì dùng ký hiệu .
và chỉ ra thứ tự (index) của của phần tử dữ liệu (tính từ 0). Như ví dụ sau:
//Tạo ra một Tuple 2 phần tử (String, Int) var profile = ("XuanThuLab", 20) //Đọc dữ liệu từ Tuple var UserName = profile.0; //XuanThuLab var UserAge = profile.1 //20
Bằng cách khai báo như trên biến profile
có kiểu Tuple (String, Int)
. Khi các Tuple có cùng cấu trúc dữ liệu thì chúng có thể gán cho nhau, thực hện phép toán logic so sanh
Đặt tên phần tử trong Tuple
Ở phần trên, khi tạo Tuple các giá trị khởi tạo khai báo trong ()
, chúng không có tên nên việc truy cập đến phần tử phải thông của chỉ số thứ tự.
Trong trường hợp muốn đặt tên phần tử (biến) để có thể truy cập qua tên thay vì chỉ số thì khai báo mỗi phần tử biểu diễn bằng tên:giá-trị
như ví dụ sau:
var newprofile = (name:"XuanThuLab", age:20) var NewUserName = newprofile.name; //XuanThuLab var NewUserAge = newprofile.age //20
Bạn cũng có thể dùng kỹ thuật Tuple này để khai báo và khởi tạo nhiều biến trên một dòng như:
var (var1, var2, var3) = ("Abc", 1, 2.2) print(var1, var2, var3)
Nhiều khi cần trích dữ liệu nào đó thôi từ Tuple, thì có thể sử dụng ký hiệu _
để bỏ quá giá trị không cần quan tâm, ví dụ:
var t1 = ("A", "B", "C") var (_, _, pr3 ) = t1 //Biến pr3 có giá trị "C" print(pr3) //C
Trả về nhiều giá trị với Tuple
Bạn có thể xây dựng các hàm trả về nhiều giá trị bằng cách khai báo hàm đó trả về một Tuple, về xây dựng hàm sẽ tìm hiểu sau, ở đây xem xét quả một ví dụ đơn giản về hàm, nếu chữa rõ cũng không sao.
//Tạo ra kiểu mới có tên ProfileType typealias ProfileType = (FirstName:String, LastName:String, FullName: String, Age:Int) //Tạo hàm để trả về một kiểu ProfileType func createProfile(firstName:String, lastName:String, age:Int) -> ProfileType { //Tạo một biến local kiểu ProfileType và trả về cho hàm let profile:ProfileType = ( firstName, lastName, firstName + " " + lastName, age); return profile } //Gọi hàm var nProfile:ProfileType = createProfile(firstName: "XUANTHU", lastName: "LAB", age:20); print(nProfile); //(FirstName: "XUANTHU", LastName: "LAB", FullName: "XUANTHU LAB", Age: 20)