Swift: Tuple

Struct Lite ™ olarak da bilinir (ancak gerçekte değil)

Tuple türleri, Objective-C geliştiricileri için biraz yabancı bir kavramdır ve bazen a structveya class. Ama aslında her ikisinden de çok daha basitler. Bunları minyatür bir yapı ya da Struct Lite ™ olarak düşünmeyi seviyorum ve bunların minimum kapsam dahilinde kullanılması ve ardından atılması gerekiyor.

Swift Türleriyle ilgili Apple belgelerine göre:

Tuple türü, parantez içine alınmış, sıfır veya daha fazla türün virgülle ayrılmış bir listesidir.

Onlar sadece diğer farklı türlerin birleşimidir. Demetler sıfır ya da daha genel olarak bir tür içerebilir String, Integer, Boolhem de diğer dizilerini. Ayrıca tupleların referansla değil değere göre aktarıldığını unutmayın .

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”

Ancak indeksleri kullanmak ve hangisinin hangi değere karşılık geldiğini hatırlamak yerine, mümkün olan her yerde demetinizin özelliklerini adlandırmak en iyi uygulamadır.

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

Bir demeti kullanmak için en iyi yer, birden çok tür döndürebilen bir işlev istediğiniz zamandır. Bir Objective-C geliştiricisi iseniz, bu konsept kulağa tuhaf ve belki de imkansız geliyor. Daha önce, bu tür bir sorunun üstesinden bir NSArrayveya döndürerek geçmek zorunda kaldık NSDictionary. Ancak bu çözüm bile tehlikeli olabilir. Çünkü ya öğesinin yanlış nesnesini yazmayı denersek ve NSArrayüzerinde belirli bir işlevi çağırırsak? Bu, çalışma zamanında bir çökme yaratabilir.

Öyleyse bunun yerine, Objective-C'nin sınırlamaları için kısa süreli hacky çözümleri bulmak yerine, bir fonksiyonun nasıl birden çok değer döndürmesini sağlayabileceğimize bakalım:

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"

Ancak yukarıda görebileceğiniz gibi getMultipleValues() , her biri kendi ilgili değişken adına sahip üç ayrı ve farklı veri türünden oluşan bir demet döndüren bir işlev çağrısı vardır.

Struct somutlaştırması (kullanımdan kaldırıldı)

Güncelleme: Bu, kullanımdan kaldırılacaktır. Swift 3.0
Teklifi: SE-0029
İşlev uygulamalarından örtük tuple uyarısı davranışını kaldırın

Bu yazının başında şaka yollu tupleları Struct Lite ™ olarak adlandırdım . Az bilinen bir gerçek, tupleların yapıları somutlaştırmak için kullanılabileceğidir.

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) 

Orada ne yaptığımı gördün mü? heightVe width konumlarını değiştirerek argümanların düzenini değiştirdim . Her ikisi de olsalar bile CGFloat, derleyici ne yapmaya çalıştığınızı anlayamaz.

İlginç gerçek

Swift'i daha önce kullandıysanız, muhtemelen dönüş türleri için zaten tuple kullanmışsınızdır, bunu bilmiyorsunuz bile. Aşağıda, hepsi aynı şeyi yapan (hiçbir şey) olmayan ve hiçbiri herhangi bir değer döndürmeyen üç ayrı fonksiyonumuz var.

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

Harika olan şey, Voidsadece bir typealiasiçin (), aslında sadece boş bir demet. Çünkü bu yazının başında hatırlarsanız tupleların sıfır veya daha fazla türü içerebileceğinden bahsetmiştim .

Zihin. Şişmiş. Rica ederim.

Telaffuzunuzu seçin

İnsanların “tuple” kelimesini nasıl telaffuz ettikleri konusunda büyük bir kafa karışıklığı var. Bazıları “Two-pull” demeyi sever, diğerleri “Tup-pl” der ve en çılgınları “Choo-pl” der. Tercihiniz ne olursa olsun, çağrılmaya hazır olun.

Bu gönderinin örnek kodu GitHub'da bulunabilir. Biraz daha iyi anlamanıza yardımcı olacak basit bir Playgrounds dosyası.

Bugün okuduklarınızı beğendiyseniz, diğer makalelerimize göz atabilir veya iletişime geçebilirsiniz, lütfen bana bir tweet gönderin veya beni Twitter'da takip edin, gerçekten günümü güzelleştiriyor. Ayrıca Avustralya'nın Melbourne şehrinde Playgrounds Konferansı düzenliyorum ve bir sonraki etkinlikte görüşmek istiyorum.

Suggested posts

Alan Adları Hakkında Bilgi Bulma

Brian P. Hogan'ın Küçük, Keskin Yazılım Araçları'ndan bir alıntı

Alan Adları Hakkında Bilgi Bulma

facebook.com'a bir talepte bulunduğunuzda, bilgisayarınız o bağlantıyı kurabilmesi için bu alan adını bir IP adresine çevirmek üzere alan adını arar.

“O küçük ada her şeyi değiştirir”

Sürücü deneyimini yükseltmek için Lyft Canlı Etkinlikleri nasıl tasarladık?

“O küçük ada her şeyi değiştirir”

Yolculuk paylaşımı için ezber bozan bir şey Lyft'te yaptığımız her şey arasında, sürücüler ve sürücüler arasındaki alışmaların koreografisini yapmak en karmaşık ve önemli olanlardan biridir. Bu koreografiyi başarmak, Lyft'in pek çok şeyi iyi yapmasına bağlıdır, ancak yalnızca binicileri hıza uydurmak çok önemlidir.

Related posts

Hristiyanlara Yönelik Zulüm: Bahsetmediğimiz Nefret Suçu

İslamofobiyi unutun: Hristiyanlar (ve Yahudiler) dini nefret suçlarının başlıca kurbanlarıdır.

Hristiyanlara Yönelik Zulüm: Bahsetmediğimiz Nefret Suçu

Her rasyonel akıl, siyaset ve medya çevrelerinde solun, hatta aşırı solun hakim olduğunu bilir, bu durum siyasi söylemde bir dengesizlik yaratır. Din alanında, bu dengesizlik açıkça görülüyor: solcu gazeteler ve ağlar, Hıristiyan inancını savunmak için acele etmiyorlar.

Güvenli Bir Çalışma Ortamı Oluşturma

Güvenli Bir Çalışma Ortamı Oluşturma

"Ben tehlikedeyken beni koruyacak. Beni çadırına saklayacak.

MY24'te karbon gideriminin finanse edilmesi

Yollar boyunca Carbon180'in ödenek taleplerinin dökümü

MY24'te karbon gideriminin finanse edilmesi

Alyson Lee, yönetici devlet işleri danışmanı Federal hükümetin yıllık ödenek süreci, karbon dioksit giderimini (CDR) finanse etme çabalarımızın merkezinde yer alır. Carbon180 her yıl, gelecek yılın dolarının nereye akacağını yönlendirmeye yardımcı olmak için çeşitli kongre ofislerine talepler sunar.

Tehlikeli Konuşmalar

Tehlikeli Konuşmalar

Bu gezegende gelişmeye devam etmek istiyorsak, tehlikeli konuşmalar yapmak zorunda kalacağız. Yaptıklarımıza, yaptıklarımıza ve şu anda yapmaya devam etmeye hazır olduğumuz (veya yapmayı planladığımız) şeylere meydan okuyanlar.