Swift dili, daha önce de belirtildiği gibi, iOS ve OS X uygulamaları geliştirmek için oluşturulmuş yeni bir programlama dilidir. Bununla beraber, doğal olarak, C ve Objective-C ile pek çok benzer yanı mevcuttur. Örneğin C ve Objective-C’deki veri tipleri Swift’te de mevcuttur:
- Int: Tam sayı
- Double: Ondalık ve üstel sayı
- Float: Ondalık ve üstel sayı
- Bool: Mantıksal değer (true - doğru, false - yanlış)
- String: Karakter zinciri
Ayrıca Array ve Dictionary gibi iki ayrı koleksiyon yapısı da Swift’in bileşenleridir.
Ayrıca Swift dilinde Objective_C’de mevcut olmayan tuple veri yapısı da mevcuttur. Tuple veri yapısında aynı türden olmayan çeşitli veriler bir arada bulunabilir ve hepsine birlikte erişilebilir.
SABİTLER (CONSTANTS) VE DEĞİŞKENLER (VARIABLES)
Sabitler, bir isim ve bir değere sahiptirler ve bu değer program boyunca değiştirilemez.
Değişkenler de, bir isim ve bir değere sahiptirler fakat bu değer program boyunca değiştirilebilir.
SABİT VE DEĞİŞKENLERİN BİLDİRİMİ
Sabitlerin bildirimi için let sözcüğünü kullanmalısınız:
let MaksIterSayisi=50
Değişkenlerin bildirimi içinse var sözcüğü kullanılır:
var kok=0
Aynı satıra virgüllerle ayırarak birden çok değişken ya da sabit ataması yapılabilir:
var x = 7, y = 5, z = 56
TİP BİLDİRİMİ
Swift dilinde tip bildirimi zorunlu değildir; ancak istenirse değişken ismini izleyen iki nokta sembolünden sonra, tip bildiriminde bulunulabilir:
var kok1 : Double
SABİT VE DEĞİŞKENLERİN YAZDIRILMASI
print fonksiyonunu kullanarak sabit ve değişkenlerin o andaki değerlerini yazdırabilirsiniz:
print(x)
burada x değişkeninin o andaki değeri yazdırılmaktadır.
Uzun değişken isimleri ya da string’ler nedeni ile bir alt satıra geçilecekse, üst satırın sonuna ters bölme işareti konulmalıdır:
print(“verilen denklem için bulunan kök değeri= \(kok)”)
AÇIKLAMA (YORUM) İFADELERİ
C’de olduğu gibi // sembolleri ile başlayarak açıklama ya da yorum satırları oluşturabilirsiniz:
// Fibonacci sayıları aşağıda hesaplanmaktadır
Birden çok satır gerektiren açıklamalar ise gene C’de olduğu gibi /* …*/ sembolleri arasına alınır:
/*Aşağıda MBO yönteminin SVM modeline
Uygulanması için gerekli adımlar görülmektedir */
NOKTALI VİRGÜL SEMBOLÜ
C ve Java’nın aksine, her deyimin sonunda noktalı virgül sembolü kullanmak Swift’te zorunlu değildir. Buna rağmen alışkanlıklar nedeni ile kullanılırsa bir sorun olmaz.
Noktalı virgülün zorunlu olduğu tek durum aynı satıra birden çok deyimin yazılmasıdır:
var x=16 ; var y=45 ; print(x) ; print(y)
TAM SAYILAR (INTEGERS)
Bilindiği gibi, tam sayılar bilgisayar dillerinde ondalık nokta içermeyen sayılardır.
Swiftte de işaretli ve işaretsiz tam sayılar mevcuttur. Swift’te tamsayılar 8, 16, 32 ve 64 bit uzunlukta olabilir.
8 bitlik işaretsiz tam sayının tipi,Uınt8 ,32 bitlik işaretli tamsayının tipi ise Int32 şeklinde belirtilir.
TAMSAYILARDA SINIRLAR
min ve max özelliklerini kullanarak her tamsayı tipinin alabileceği en küçük ve en büyük değerleri bulabilirsiniz:
let enKucuk=UInt8.min// enKucuk değişkeninin değeri 0 olacaktır.
let enBuyuk=UInt8.max // enBuyuk değişkeninin değeri 255 olacaktır.
Int
Int türünde tanımlanan bir değişken, 32 bitlik bir platformda Int32 ile aynı anlamdadır.
Gene, Int türü, 64 bitlik platformda ise Int64 tipi ile aynı anlamdadır.
Int türünde tanımlanan değişken,
-2,147,483,648 ile 2,147,483,647 arasında değerler alabilir ve bu pek çok durumda tam sayı değerler için yeterlidir.
UInt
Swift, ayrıca işaretsiz tam sayılar için UInt türünü de haizdir. UInt, bulunduğu platformun işaretsiz tamsayı için default olarak kullandığı tip ile aynı değerleri alır. 32 bitlik platformlarda, UInt, UInt32 ile aynı anlamdadır. 64 bitlik platformlarda ise UInt, UInt64 ile aynı anlamdadır.
KAYAN NOKTALI (FLOATING POINT) TÜRÜNDEKİ SAYILAR
Kayan noktalı sayılar, ondalık sayı ya da üstel sayıları temsil için kullanılırlar.
-34.76 , 1000.009 , 1.2e8(1.2 x 108) gibi sayılar kayan noktalıdır.
32 bitlik yer kaplayan kayan noktalı sayılar Float sözcüğü ile, 64 bitlik kayan noktalı sayılar ise Double sözcüğü ile tanımlanır.
TYPE SAFETY (TİP GÜVENLİĞİ) VE TYPE INFERENCE (TİP ÇIKARIMI) ÖZELLİKLERİ
Swift dili, değişken ve sabitlerde olması gereken tip yerine başka bir tip gördüğü zaman hata mesajı üreten dillerdendir. Örneğin, tamsayı olması gereken bir yerde string verisi ile karşılaşılırsa hata mesajı alınır.
Bununla birlikte değişken ve sabitler için başlangıçta mutlaka tip ataması gerekmez. Swift, değişken ya da sabitlerin tipini iki türlü belirler:
I. Değişken ya da sabitin türü (tipi) açıkça belirtilir:
var basinc:Double=40
Bu örnekte basinc değişkeni açık olarak Double türünde atanmıştır.
II. Tip ataması değişken ya da sabitlere başlangıç değeri atanması yolu ile de gerçekleştirilir. Bu durumda derleyici değişken ya da sabite atanan değeri yorumlayarak tip atamasını gerçekleştirir. Buna type inference adı verilmektedir:
var u=56.98
let v=45
Burada ondalık sayı atanınca u değişkeni Double olarak atanır (float değil). v sabiti ise aşikar olarak tam sayı olarak atanır.
let xx=50+3.78
Bu tür bir ifadede xx değeri Double olarak atanacaktır.
SAYISAL LİTERALLER
Swift dilinde tamsayı literaller aşağıdaki türlere ayrılır:
I. ONLUK SİSTEMDE TAM SAYI
Hiçbir ön ek almaksızın aşağıdaki gibi atanır:
let onlukTamSayi=25
II. İKİLİK (BINARY) SİSTEMDE TAM SAYI
0b ön eki ile atanır:
let ikiliTamSayi=0b1101
III. SEKİZLİK (OCTAL) TAM SAYI
0o ön eki ile belirlenir:
let oktalTamsayi=0o421
IV. ONALTILIK (HEXADECIMAL) TAM SAYI
0x ön eki ile atanır:
let onaltilikTamSayi=0oAB2E
Kayan noktalı ondalık sayılar ise ön eksiz, ondalık nokta ile ya da e sembolü yardımı ile üstel sayı olarak gösterilir:
let onlukDesimal=0.8997
let ustelDesimal=1.2543e3
Burada 1.2543e3 sayısı, 1.2543x103=1.2543x1000=1254.3 anlamındadır.
ONALTILIK (HEXADECIMAL) ÜSTEL SAYILAR
Onaltılık üstel sayılarda e yerine p kullanılır ve p burada 2 tabanını gösterir:
let onaltiUstel=0xA3p2
Burada onaltiUstel sayısının değeri (A.16+3.160)x22=(160+3)x4=652 olacaktır.
Gerek tam sayılarda gerekse ondalık sayılarda okumayı kolaylaştırmak için ekstra sıfırlar ya da alt çizgi (_) sembolü kullanılabilir:
let birMilyar=1_000_000_000
let xx=00034.056
SAYISAL (NUMERIC) TİP DÖNÜŞÜMLERİ
- INTEGER TİPLER ARASINDA DÖNÜŞÜM
Yukarda da belirttiğimiz gibi her tam sayı (Int) türü farklı aralıklarda değerler taşıyabilir. Örneğin, Int8 türü -127 ile 128 arasında değerler taşırken UInt8 türü ise 0 - 255 arasında değerler taşıyabilecektir. Herhangi bir türde tam sayıya tanımlanmış aralık dışında değer atanması sonucunda hata mesajı alınacaktır:
let suTamSay:UInt8=-2
//İşaretsiz tamsayıya negatif değer atanamaz hata mesajı alınacaktır.
let buTamSay:Int8=Int8.min-1
// Int8 türündeki tam sayıya taşıyabileceği en küçük sayıdan daha küçük bir sayı atanıyor; hata mesajı alınacaktır
Daha küçük aralıktaki bir değer daha büyük aralıktaki bir değişkene doğrudan atanamaz; küçük aralıktakinin başına tip dönüşümü için tür bildirisi yerleştirilmelidir:
ÖRNEK:
let xx:UInt16=1_000
let yy:UInt8=2
let xxyy=xx+UInt16(yy)
Böylece xxyy sabitinin değeri 1002 ve türü UInt16 olacaktır.
TAMSAYI (Int) VE KAYAN NOKTALI SAYI (FLOATING POINT) ARASINDA DÖNÜŞÜM
Tamsayılar başına Double (Float) bildirisi konularak doğrudan kayan noktalı hale dönüştürülebilir:
ÖRNEK:
let on=10
let yeniSayi=Double(on)+5.123
Böylece yeniSayi’nın değeri 15.123 ve türü Double olacaktır.
Kayan noktalıdan tam sayıya dönüşüm de benzer şekildedir:
let ondalik=13.987
let yeniTam=Int(ondalik)
Bu atama sonucu yeniTam sabitinin değeri 13 olacaktır.
TİP BİLDİRİMİ İÇİN TAKMA İSİM (ALIAS) KULLANMA
Bazı durumlarda belirli bir tip bildirim sözcüğü için takma bir ad oluşturup bununla bildirim yapmak pratikte daha faydalı olabilir.Bu amaçla, typealias anahtar sözcüğü kullanılır.
ÖRNEK:
typealias altSinir=UInt8
Bu atamadan sonra altSinir sözcüğü UInt8 bildiri sözcüğü yerine geçecektir:
let enKucuk=altSinir.min
Böylece enKucuk adlı sabitin değeri UInt8’in alt sınır değerine eşit olacaktır.
MANTIKSAL DEĞERLER (BOOLEANS)
Swift dili Bool bildiri sözcüğü ile Boolean tipte, sadece true (doğru) veya false (yanlış) değerlerinden birini alabilen sabit ya da değişkenler tanımlama imkanı da sağlar. Bunlara aynı zamanda mantıksal (logical) sabit ya da değişkenler de denir.
ÖRNEK:
let doğru=true
let yanlis=false
Burada doğru sözcüğü true ve yanlis sözcüğü de false olarak tanımlanmış ve çıkarım (inference) yolu ile Bool türünde atanmışlardır. Bu bildirim için her zaman Bool sözcüğünü kullanmak ta mümkündür.
let hayir:Bool=false
Bool tipi sabit ve değişkenler doğal olarak if ya da while gibi kontrol komutlarında kullanılır:
let kontrol=false
if kontrol
{ print("EN GÜZEL BODRUM") }
else {print("EN GÜZEL MARMARİS") }
Sonuçta EN GÜZEL MARMARİS ifadesi yazılacaktır.
if ya da while komutunda Bool tipi bir değer yerine başka bir tip kullanılırsa derleyici tarafından hata mesajı verilir:
let x=12
if x
{print("xxxxxxx")
}
else{ print("yyyyyyyy")}
Bu komutta if koşulu yerinde Int türü bir değişken olduğu için derleyici hata mesajı verecektir.
Aynı komut aşağıdaki gibi yazılırsa,
let x=12
if x==12
{print(“xxxxxxx”)
}
else{ print(“yyyyyyyy”)}
ekranda xxxxxxx ifadesi görünecektir. Çünkü x’in değeri 12 olduğu için x==12 ifadesinin sonucu, 12==12 ve doğru (true) olarak elde edilecek ve bunun sonucunda da if sözcüğünü izleyen print icra edilerek xxxxxxx ifadesi yazılacaktır.
TUPLE (ÇOKLU, ÇOK BİLEŞENLİ)
Swift’te mevcut olan ve diğer bir çok bilgisayar dilinde mevcut olmayan bir veri tipi de tuple’dır. Tuple, farklı türlerden veriler içeren heterojen bir veri yapısıdır.
ÖRNEK:
let personel=(1234,"ali","can",5000,"fatih")
Burada personel adlı ve elemanları Int, String, String, Int, String türünde tanımlanmış bir tüple oluşturulmuştur.
Tuple içindeki alanlar da ayrıca tanımlanabilir:
let (sicil,ad,soyad,maas,adres)=personel
Oluşturulan tuple’ın içindeki bileşen ya da alanlara çeşitli şekillerde erişilebilir:
print(personel.0)
Bu konut ile personel tuple’ının sicil alanı yazdırılacaktır.
print(personel.ad)
Bu komut ile de personel tuple’ının ad alanı yazdırılacaktır.
Bazı durumlarda tüple içindeki sadece bir iki alana erişim gerekebilir; bu durumda gerekli olmayan alanlar yerine _ sembolü kullanılır.
ÖRNEK:
let (a,b,c,_,_)=personel
Bu durumda a sicil ,b ad,c soyad değerlerine sahip olacaktır.
OPTIONALS (SEÇİMLİ)
Optional türü C ve Objective C’de mevcut olmayan bir türdür. Bu türde bir verinin,
-Belirli tipte bir veriyi içerebileceği
ya da
-hiç bir veri içermeyeceği farz edilir.
ÖRNEK:
let say = "4567"
let intSay = Int(say)
Burada Int() fonksiyonu stringi tam sayıya (Int) dönüştüren bir fonksiyondur. Burada dönüşüm başarılı olacak ve intSay 4567 tam sayısı olarak üretilecektir.
Ancak, say stringi “ankara” gibi sadece harflerden oluşsaydı bu dönüşüm gerçekleşmeyecekti. O nedenle intSay’ın türü Int değil Optional Int’tir ve Int? Şeklinde de gösterilir.
OPTIONAL DEĞERLER VE IF KOMUTU
Optional bir veri içinde bir değer olup olmadığını if komutu ile kontrol edebilirsiniz. if komutu kontrol edilen optional veri içinde bir değer varsa true yoksa false sonucunu üretir.
ÖRNEK:
let say="4567"
let intSay=Int(say)
if intSay != nil {
print("\(say) \(intSay!) değerini içeriyor")
} else {
print("\(say) tam sayıya dönüştürülemez")
}
Burada sonuç, “4567 4567 değerini içeriyor sonucu elde edilecektir. Burada intSay’ın sonuna konulan ! işaretinin anlamı şudur: “intSay kesinlikle bir değer içeriyor o değeri kullan”
SEÇİMLİ BAĞLAMA (OPTIONAL BINDING)
Seçimli bağlama, if ya da while kullanılarak optional tipteki verilerin içindeki değerleri (varsa) bir sabit ya da değişkene atama imkanı sağlayan bir tekniktir.
if konutu ile aşağıdaki biçimde gerçekleştirilebilir:
if let sabitDeger = optionalDeger {
Deyimler
}
Yukardaki örneği buna göre yeniden yazabiliriz:
let say="4567"
let intSay=Int(say)
if intSay != nil {
print("\(say) \(intSay!) değerini içeriyor")
} else {
print("\(say) tam sayıya dönüştürülemez")
}
Yukarıdaki kod XCode ortamında çalıştırılmış ve aşağıdaki sonuç elde edilmiştir:
nil VERİ TÜRÜ
Optional olarak tanımlanan bir veriyi, hiçbir değer içermeyen hale getirmek için nil sözcüğü kullanılır:
var u:Int?=5
u=nil
Bu atamaların sonunda, u sabiti Optional bir sabittir ve hiç bir değer içermemektedir.
İlk değer ataması yapmadan bir Optional değişken ya da sabit tanımlarsanız, içine atanacak değer otomatik olarak nil olacaktır:
var a:Int?
let b:String?
Bu atamalarla a ve b verileri nil değerini içerecektir.