Swift: Tuple

Còn được gọi là Struct Lite ™ (nhưng không hẳn vậy)

Các loại Tuple là một khái niệm xa lạ đối với các nhà phát triển Objective-C và đôi khi có thể bị nhầm lẫn với a structhoặc class. Nhưng trên thực tế, chúng cơ bản hơn nhiều so với cả hai. Tôi thích nghĩ về chúng như một cấu trúc thu nhỏ hoặc Struct Lite ™ nên được sử dụng trong một phạm vi tối thiểu sau đó bị loại bỏ.

Theo tài liệu của Apple về Các loại Swift:

Loại tuple là danh sách được phân tách bằng dấu phẩy gồm không hoặc nhiều loại, được đặt trong dấu ngoặc đơn.

Chúng chỉ là một hợp chất của các loại khác nhau. Tuples có thể chứa zero hoặc nhiều loại, thường có một String, Integer, Boolcũng như các bộ khác. Cũng xin lưu ý rằng các bộ giá trị được chuyển theo giá trị , không phải tham chiếu.

let foo = (0, false, “Hello”)

let foo: (Int, Bool, String) = (0, false, “Hello”)

print(foo.0) // print: “0”
print(foo.1) // print: “false”
print(foo.2) // print: “Hello”

let bar: (Int, (Bool, String)) = (1, (false, “Hello”))
print(bar.0)   // print: “0”
print(bar.1.0) // print: “false”
print(bar.1.1) // print: “Hello”

Nhưng thay vì sử dụng các chỉ mục và phải nhớ cái nào tương ứng với giá trị nào, cách tốt nhất là đặt tên cho các thuộc tính của tuple nếu có thể.

let person = (age: 28, isTall: false, name: “Andyy”)
print(person.age)    // print: “28”
print(person.isTall) // print: “false”
print(person.name)   // print: “Andyy”

Nơi tốt nhất để sử dụng một tuple sẽ là khi bạn muốn một hàm có thể trả về nhiều kiểu. Nếu bạn là một nhà phát triển Objective-C, khái niệm này nghe có vẻ kỳ lạ và thậm chí là không thể. Trước đây, chúng tôi đã phải khắc phục sự cố như vậy bằng cách trả về một NSArrayhoặc NSDictionary. Nhưng ngay cả cách giải quyết đó cũng có thể nguy hiểm. Bởi vì điều gì sẽ xảy ra nếu chúng ta thử đánh máy sai đối tượng của NSArrayvà gọi một hàm cụ thể trên đó? Điều đó có thể tạo ra sự cố trong thời gian chạy.

Vì vậy, thay vào đó, hãy xem cách chúng ta có thể làm cho một hàm trả về nhiều giá trị, thay vì đưa ra các giải pháp hack ngắn hạn cho các hạn chế của Objective-C:

typealias Person = (age: Int, isTall: Bool, name: String)
func getMultipleValues() -> Person {
let person: Person = (age: 28, isTall: false, name: “Andyy”)
return person
}
let andyy = getMultipleValues()
print(andyy.age)    // print: "28"
print(andyy.isTall) // print: "false"
print(andyy.name)   // print: "Andyy"

Nhưng như bạn thấy ở trên, có một lệnh gọi hàm getMultipleValues() trả về một bộ ba kiểu dữ liệu riêng biệt và khác nhau, mỗi kiểu có tên biến tương ứng riêng.

Thuyết minh cấu trúc (không được dùng nữa)

Cập nhật: Tính năng này sẽ không được dùng nữa
Đề xuất Swift 3.0 : SE-0029
Xóa hành vi biểu tượng tuple ngầm khỏi các ứng dụng chức năng

Ở phần đầu của bài đăng này, tôi đã gọi đùa bộ giá trị là Struct Lite ™ . Một thực tế ít được biết đến là các bộ giá trị có thể được sử dụng để khởi tạo cấu trúc.

let size = CGSize(width: 100, height: 100)

let arguments: (width: CGFloat, height: CGFloat) = (100, 100)
var size = CGSize(arguments)

let arguments: (height: CGFloat, width: CGFloat) = (100, 100)
❗️ var size = CGSize(arguments) 

Bạn có thấy tôi đã làm gì ở đó không? Tôi đã thay đổi cách sắp xếp của các đối số bằng cách hoán đổi vị trí heightvà width . Mặc dù cả hai CGFloat, trình biên dịch không thể suy ra những gì bạn đang cố gắng thực hiện.

Sự thật thú vị

Nếu bạn đã từng sử dụng Swift trước đây, rất có thể bạn đã thực sự sử dụng các bộ giá trị cho các kiểu trả về, bạn thậm chí không biết điều đó. Bên dưới chúng ta có ba hàm riêng biệt, tất cả đều làm cùng một việc (không có gì) và không hàm nào trả về bất kỳ giá trị nào.

func doNothingA() -> Void { }
func doNothingB() -> () { }
func doNothingC() { }

Điều thú vị là, Voidchỉ là một typealiascho (), mà thực sự chỉ là một bộ giá trị rỗng. Bởi vì nếu bạn nhớ ở đầu bài viết này, tôi đã đề cập rằng bộ giá trị có thể chứa không hoặc nhiều loại.

Lí trí. Thổi bay. Không có gì.

Chọn cách phát âm của bạn

Có một sự nhầm lẫn lớn về cách mọi người phát âm từ "tuple". Một số thích nói "Hai lần kéo", trong khi những người khác nói "Tup-pl", và những người điên rồ nhất nói "Choo-pl". Dù sở thích của bạn là gì, hãy chuẩn bị sẵn sàng để được gọi tên trên đó.

Mã mẫu của bài đăng này có thể được tìm thấy trên GitHub. Nó chỉ là một tệp Playgrounds đơn giản để giúp bạn hiểu rõ hơn.

Nếu bạn thích những gì bạn đã đọc hôm nay, bạn có thể xem các bài viết khác của chúng tôi hoặc muốn liên hệ, vui lòng gửi cho tôi một tweet hoặc theo dõi tôi trên Twitter , nó thực sự làm nên ngày của tôi. Tôi cũng tổ chức Playgrounds Conference tại Melbourne, Australia và hẹn gặp lại các bạn ở sự kiện tiếp theo.

Suggested posts

Tìm kiếm thông tin về tên miền

Đoạn trích từ Small, Sharp Software Tools của Brian P. Hogan

Tìm kiếm thông tin về tên miền

Khi bạn gửi yêu cầu tới facebook.com, máy tính của bạn sẽ tra cứu tên miền để dịch tên miền đó thành địa chỉ IP để máy tính của bạn có thể thực hiện kết nối đó.

“Hòn đảo nhỏ đó thay đổi mọi thứ”

Cách chúng tôi thiết kế Hoạt động trực tiếp trên Lyft để nâng cao trải nghiệm của người lái

“Hòn đảo nhỏ đó thay đổi mọi thứ”

Yếu tố thay đổi cuộc chơi cho hoạt động đi chung xe Trong tất cả những việc chúng tôi làm tại Lyft, dàn dựng các cuộc đón giữa người lái và người lái xe là một trong những việc phức tạp và quan trọng nhất. Việc hoàn thành vũ đạo này phụ thuộc vào việc Lyft làm tốt nhiều thứ nhưng chỉ đơn giản là giữ cho các tay đua bắt kịp tốc độ là điều cần thiết.

Related posts

Cuộc cách mạng tại nơi làm việc: Các chuyên gia hàng đầu thảo luận về công việc kết hợp và từ xa

Cuộc cách mạng tại nơi làm việc: Các chuyên gia hàng đầu thảo luận về công việc kết hợp và từ xa

Trong bối cảnh kinh doanh phát triển nhanh chóng ngày nay, khái niệm làm việc kết hợp và làm việc từ xa đã đạt được động lực chưa từng có. Khi các công ty tiếp tục thích ứng với nhu cầu và kỳ vọng thay đổi của nhân viên, các chuyên gia từ nhiều lĩnh vực khác nhau đã cùng nhau thảo luận về lợi ích, thách thức và tương lai của cách làm việc mang tính biến đổi này.

Vụ sát hại Jordan Neely và vấn đề phân biệt chủng tộc “yêu nước”

Hoa Kỳ có thể thực hiện một bước thiết yếu là không đánh đồng hành vi phân biệt chủng tộc với việc trở thành một người Mỹ tốt không?

Vụ sát hại Jordan Neely và vấn đề phân biệt chủng tộc “yêu nước”

[Cảnh báo kích hoạt: Bài tiểu luận này bao gồm các bức ảnh chụp màn hình những người ca ngợi kẻ giết Jordan Neely.] Các quan chức thực thi pháp luật cuối cùng - và có lẽ miễn cưỡng - đã buộc tội Daniel Penny, kẻ đã bóp cổ Jordan Neely cho đến chết, vì tội giết người đó.

Lời nói dối cao bồi

Làm thế nào các siêu tập đoàn đã bán cho người Mỹ một sự giả dối mạnh mẽ

Lời nói dối cao bồi

Đó là một buổi sáng vàng rực rỡ trên những ngọn đồi thoai thoải ở phía tây, khi những tia nắng đầu tiên chiếu sáng ngọn cỏ phủ sương trên đồng bằng. Một đàn gia súc Angus điềm đạm, đen tuyền và to lớn, in bóng dưới ánh bình minh khi chúng đi xuống con đường mòn bị đánh đập đến một địa phương mà tất cả chúng đều biết rõ; quán ăn sáng.

Cuộc trò chuyện nguy hiểm

Cuộc trò chuyện nguy hiểm

Nếu chúng ta muốn tiếp tục phát triển trên hành tinh này, chúng ta sẽ phải có những cuộc đối thoại nguy hiểm. Những thứ thách thức những gì chúng ta đã làm, những gì chúng ta đang làm và những gì chúng ta hiện đang chuẩn bị tiếp tục làm (hoặc đang có kế hoạch làm).