GO FURTHER, FASTER: Try the Swift Career Accelerator today! >>

Arrays (Diziler)

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]

Dizi oluşturmak

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!

Dizi operatörleri

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"]
Hacking with Swift is sponsored by RevenueCat.

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.

Learn more here

Sponsor Hacking with Swift and reach the world's largest Swift community!

BUY OUR BOOKS
Buy Pro Swift Buy Pro SwiftUI Buy Swift Design Patterns Buy Testing Swift Buy Hacking with iOS Buy Swift Coding Challenges Buy Swift on Sundays Volume One Buy Server-Side Swift Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Advanced iOS Volume Three Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with macOS Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Beyond Code

Was this page useful? Let us know!

 
Unknown user

You are not logged in

Log in or create account
 

Link copied to your pasteboard.