Diziler birçok değeri tek bir koleksiyonda gruplamanızı, ardından da koleksiyondaki yerini kullanarak bu değerlere ulaşmanızı sağlar. Swift, tip belirtecini kullanarak, dizinin ne tür bir veri tuttuğunu belirler. Yani şöyle:
var evenNumbers = [2, 4, 6, 8]
var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
Gördüğünüz gibi, Swift dili bir dizinin başlangıcını ve sonunu belirlemek için köşeli parantez kullanır ve dizideki her bir eleman virgül ile birbirinden ayrılır.
Bir dizinin içeriği okunmaya başladığında, dikkat etmelisiniz: Swift dili 0'dan (sıfırdan) saymaya başlar. Bu, ilk elemanın 0, ikinci elemanın 1, üçüncünün 2 ve böyle devam ettiği anlamına gelir. Oyun alanınıza şunu girmeyi deneyin:
var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
songs[0]
songs[1]
songs[2]
Bu kodun sonuç panelindeki çıktısı "Shake it Off", "You Belong with Me" ve "Back to December" olacaktır.
Dizideki bir elemanın pozisyonu onun indeksi olarak anılır ve herhangi bir elemanı bu indeksi kullanarak okuyabilirsiniz. Ama tabi dikkatli olmalısınız, üç elemanlı dizimizin 0, 1 ve 2. indeksleri doğru çalışacaktır. Eğer songs[3]
yazmayı denerseniz, oyun alanınız çalışmayı durduracaktır; eğer gerçek bir uygulamada denemiş olsaydınız, çökerdi!!
Üç tane String vererek diziyi oluşturduğunuz için, Swift bunun bir String dizisi olduğunu biliyor. Oyun alanında, herhangi bir değişkenin veri tipini yazdırıran özel bir komut kullanarak, bu sonucu onaylayabilirsiniz:
var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
type(of: songs)
Bu komut, songs
dizisinin String'lerden oluştuğunun Swift dili tarafından kabul edildiğini size söyleyerek, sonuç paneline Array<String>.Type
yazdıracaktır.
Diyelim ki bir hata yaptınız ve kazara dizinin sonuna bir sayı girdiniz. Şunu deneyin ve sonuç panelinde ne yazdığına bakın:
var songs = ["Shake it Off", "You Belong with Me", "Back to December", 3]
type(of: songs)
Bu kez bir hata göreceksiniz. Bu hata, bu dizide olduğu gibi karışık veri tiplerini içeren dizilerle Swift dilinin aş edemediği için değil –bunun nasıl yapıldığını birazdan size göstereceğim!– aksine, Swift dilinin ne kadar yardımcı olduğu içindir. Gördüğünüz hata mesajı “heterogenous collection literal could only be inferred to '[Any]'; add explicit type annotation if this is intentional.” ("ayrı cinsten oluşan koleksiyonlar sadece '[Any]' olarak belirtildiğinde oluşturulur; eğer niyetiniz buysa açıkça tip belirtecinizi ekleyin.") Anlayacağımız şekilde söylersek, "bu dizi birçok veri tipi için tasarlanmışa benziyor, eğer amacınız buysa, lütfen bunu açık seçik belirtin."
Tip güvenliği önemlidir ve Swift dilindeki diziler her tür veriyi tutabilmesine rağmen, bu özel durum kazara olmuştu. Neyse ki, dizide tam olarak ne tür veri saklamak istediğinizi belirlemek için tip belirtimi kullanabileceğinizi size söylemiştim. Bir dizinin tipini belirlemek için, köşeli parantezlerin içine veri tipini şu şekilde yazabilirsin:
var songs: [String] = ["Shake it Off", "You Belong with Me", "Back to December", 3]
Şimdi biz, Swift diline bu dizinin içine sadece String saklamak istediğimizi söyledik, ama 3 rakamı String olmadığı için kodumuzun çalışması reddedilecektir.
Eğer dizinin herhangi bir tür veri tipini tutmasını istiyorsak gerçekten, o zaman özel Any
veri tipini kullanacağız:
var songs: [Any] = ["Shake it Off", "You Belong with Me", "Back to December", 3]
Yukarıda gösterilen sözdizimini kullanarak bir dizi oluşturmak istersek, Swift diziyi oluşturur ve belirlediğimiz değerlerle içini doldurur. Ama önce diziyi oluşturup, içini sonra doldurmak isterseniz, bu öyle basitçe olmaz; bu sözdizimi işe yaramaz:
var songs: [String]
songs[0] = "Shake it Off"
Sebep ilk bakışta gereksiz bir detaycılık olarak görünecek, ama biraz derinlemesine bakınca altında yatan performans konuları olduğunu anlayacaksınız. Galiba siz buraya takıldınız. Basitçe var songs: [String]
yazmak, songs
değişkeninin String'lerden oluşan bir diziyi saklayacağını Swift'e söylemiş oluruz, ama aslında bu diziyi oluşturmuş olmaz. RAM'de herhangi bir alan kaplamaz veya Swift dizisini oluşturan herhangi bir iş yapılmış olmaz. Sadece bir dizi oluşturulacağını ve bu dizinin String veri tiplerini saklayacağını söyler.
Bunu doğru bir şekilde ifade edebilmenin birkaç yolu var ve şu anda en anlamlı olanı da muhtemelen bu:
var songs: [String] = []
String'lerden oluşan bir dizi oluşturacağımızı açıklığa kavuşturan ve ona içi boş bir dizi atayan (yani şöyle []
) tip belirtimini kullanılıyor.
Aynı zamanda yaygın olarak kullanılan bu yapıyı da göreceksiniz:
var songs = [String]()
Aynı anlama geliyorlar: ()
şeklindeki kullanım, tip çıkarsamasını kullanarak songs
değişkenine atanacak olan söz konusu diziyi oluşturacağımızı Swift'e söyler. Bu seçenek iki karakter daha kısadır, dolayısıyla programcıların bu kullanımı tercih edecekleri şaşırtıcı olmaz!
Diziler üzerinde sınırlı bir operatör serisi kullanabilirsiniz. Örneğin, aşağıdaki gibi iki diziyi + operatörünü kullanarak birleştirebilirsiniz:
var songs = ["Shake it Off", "You Belong with Me", "Love Story"]
var songs2 = ["Today was a Fairytale", "Welcome to New York", "Fifteen"]
var both = songs + songs2
Eklemek ve atamak için de şu şekilde += operatörünü kullanabilirsiniz:
both += ["Everything has Changed"]
SPONSORED Take the pain out of configuring and testing your paywalls. RevenueCat's Paywalls allow you to remotely configure and A/B test your entire paywall UI without any code changes or app updates.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.