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.
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.
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ì.
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.
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 đó.
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.
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.
[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à 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.
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).