iOS

Swift 2.2’yi inceledik

Swift 2.2 geçenayyayınlandığından bu yana büyük ses getirdi. Swift 2.2 ile gelen yenilikler bizi şaşırttı ve bir o kadar da mutlu etti. Swift 2.2 ‘nin detaylarına giriş yapmadanönce belirtmek isteriz ki genel olarak Apple söz dizimi değişikliği ve Swift’in farklılaşması ad...

Swift 2.2 geçen ay yayınlandığından bu yana büyük ses getirdi. Swift 2.2 ile gelen yenilikler bizi şaşırttı ve bir o kadar da mutlu etti. Swift 2.2 ‘nin detaylarına giriş yapmadan önce belirtmek isteriz ki genel olarak Apple söz dizimi değişikliği ve Swift’in farklılaşması adına yenilikler sunmaktadır. Bu yazımızda örnek kodlarla sizlere bu yenilikler hakkında detaylı bilgiler vermeye çalışacağız. Sizlere tavsiyemiz örneklerle açıkladığımız kodları Xcode IDE’sinde denemenizdir, eğer Xcode nasıl kullanılır öğrenmek istiyorsanız buradaki Swift eğitimimize göz atabilir ve daha sonra blog yazımıza dönüp denemeler yapabilirsiniz.

 

++ ve -- operatörleri artık Swift’te kullanılmayacak

Resmi olarak Apple “++” ve” --” operatörlerini kaldırma kararı aldı. Kaldırma kararı alması sizi şimdilik korkutmasın şuan yapılan bütün projelerde bu operatörleri kullanmanız halinde sadece uyarı alacaksanız. Fakat bu uyarı Swift 3.0 güncellemesinde bu operatörlerin kaldırılacağı sinyalini vermektedir.

İpucu: ++ ve -- operatörlerin yerine += 1’i ve -= 1’i kullanabilirsiniz.

Neden bu operatörler kaldırıldı diye soranlar mutlaka olacaktır. C, C# ve Java gibi birçok dilde kullanılan bu opretörlerin kaldırılması için birkaç sebep var diyebiliriz.Bunlar;

1. ++ şeklinde yazmaktansa  +=1 yazmak zaman kaybınızı önler.

2. Programcılığa yeni başlayanlara anlam kolaylığı sağlaması açısından ++ ‘ın tek başına bir anlamı yoktur fakat “+= “ şeklinde bir ifade, ekleme ve atamayı çağrıştır.

Bu değişiklikler gözümüze çarpan birkaç olumlu gelişmedir.

     

Geleneksel C-stili  for döngüleri yakında kullanılmayacak

Yanlış okumadınız arkadaşlar yakında en yaygın for döngüsü Swift’te kullanılamaz hale gelecek.

Ör:

for var i = 1;i<=10; i+=1 {

    print("\(i) tane mavi kutu")

}

 

Üstte belirttiğmiz türde bir döngü C-tipi döngü olarak bilinir. Swift bir C benzeri dil olmasına rağmen, bu yenilik ile bir seviye  daha  farklılaşmaya çalışmakta ve daha akıllıca bir alternatif sunmaktadır.

Geleneksel For döngüsü için çok alternatif oluşturulabilir.Bunlar;

Ör:

Bir önceki örnekteki mavi kutuları yazımızın tamamında kullanacağız.

for i in 1...10 {

   print(“\(i) tane mavi kutu”)

}

Uyarı: Büyük sayıdan küçük sayıya azalan döngülerde “runtime” hatası alabilirsiniz, fakat bunun için Swift’te artık çok kolay bir alternatif var.

Ör:

for i in (1...10).reverse() {
    
    print("\(i) tane mavi kutu")
    
}

 

Yukarıdaki örnekte 1 den 10 kadar olan rakamları tersten döngüye girmesini sağlayan bir reverse() metodu kullanılmış.

Başka bir alternatif ise;

Ör:

var dizi = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for sayilar in dizi {

    print("\(sayilar) tane mavi kutu")

   }

 

Teknik olarak en doğrusunu istiyorum diyorsanız,kısacası doğrunun en iyisini arıyorum diyorsanız.

Ör:

var dizi = Array(1...10)

for sayilar in dizi {

    print("\(sayilar) tane mavi kutu")

   }

 

Eski Swift(Swift 2.1 ve daha eski sürümler);

 for (var i = 0; i < 10 ; i = i + 2) {
              
          print("\(i) tane mavi kutu")
                
        }

Yeni Swift(Swift 2.2);

for i in 0.stride(to: 10, by: 2) {
            
            print("\(i) tane mavi kutu")
            
        }

 

Artık diziler ve diğer bölme tipleri için removeFirst() metodu geliyor

Eski Swift versiyonlarında removeLast() metodu, diziler ile çalışan herkes için her zaman kolaylık sağlamıştır; fakat dizinin ilk elemanını kaldırmak için bir Swift’te hep eksiklik olmuştur. İşte tam bu noktada Swift 2.2 yardımınıza koşuyor. Önceki örneklerimizi takip ederek yeni bu konuda yeni bir örnek yapalım.

Ör:

var dizi = Array(1...10)

dizi.removeFirst()

for sayi in dizi {

    print("\(sayi) mavi kutu")

}

 

Tupleları artık karşılaştırabilirsiniz

Tuple, virgül ile ayrılmış bir liste değerleridir.

Ör:

let bayansarkici = ("Avril ", "Lavigne")

let  erkeksarkici = ("Michael", "Jackson")

 

Eski versiyonlarda aşağıdaki gibi biraz hantal bir kod yazmanız gerekiyordu, üstelik karşılaştırma yapılamıyodu.

func ==  (t1: (T, T), t2: (T, T)) -> Bool {

    return t1.0 == t2.0 && t1.1 == t2.1

}

aşağıdaki kod ise Swift 2.2 ile bu durumu çözmeye yarayan bir güncelleme

Ör:

let bayansarkici = ("Avril", "Lavigne")

let erkeksarkici = ("Michael", "Jackson")



if bayansarkici == erkeksarkici {

    print("Tuple’lar eşleşiyor!")

} else {

    print("Tuple’lar eşleşmiyor!”)

}

 

Tuple splat söz dizimi de vadesini doldurdu

2010 yılından beri  Swift'i farklılaştıran özelliklerden birisi olan tuple splat’e de artık veda ediyoruz. Birçok programcı tarafından nadiren kullanılan “tuple splat” sözdizimi şu şekilde idi;

Ör:

Bu örneği denediğinizde iki argümanın artık  tek Tuple olarak kullanılamayacağı uyarısı ile karşılaşabilirsiniz.

func kisitanimla(isim: String, yas: Int) {

    print("\(isim) is \(yas) yaşında")

}

let kisi = ("Taylor Swift", yas: 26)

kisitanimla(kisi)

 

Birçok anahtar kelime artık argüman etiketi gibi kullanılabilir

Bu yeniliğin  birçok programcıyı sevindireceği hiç şüphesiz.

Argüman etiketleri Swift’in ana özelliklerinden birisidir.

Ör:

func printselam(isim: String, tekrar tekrarsayisi: Int) {

    for _ in 0 ..< tekrarsayisi {

        print(isim)

    }

}

printselam("Taylor", tekrar: 5)

 

var parametresi artık kullanılamayacak

Bir diğer değişim ise fonksiyon parametresi olarak yazılan “var “

Bu değişim size zaman kazandıracak ve farklı kafa karışıklıklarını ortadan kaldıracak bunu bir örnekle daha net izah etmek gerekirse;

 

Eski Swift(Swift 2.1 ve daha eski sürümler);

Ör:

func printselam(var isim: String, tekrar tekrarsayisi: Int) {

    isim = isim.uppercaseString



    for _ in 0 ..< tekrarsayisi {

        print(isim)

    }

}

printselam("Taylor", tekrar: 5)

 

Yeni Swift(Swift 2.2);

Ör:

func printselam(isim: String, tekrar tekrarsayisi: Int) {

    let buyukharf = isim.uppercaseString

   

    for _ in 0 ..< tekrarsayisi {

        print(buyukharf)

    }

}

printselam("Taylor", tekrar: 5)

 

Üstteki iki kod bloğu arasındaki fark üstte “var isim “olan parametre artık sadece “isim” oldu.

Yani fonksiyon parametresi olarak kullanılan var size ,bu parametreyi fonksiyonun içinde değiştirme imkanı sunuyordu oysaki “inout “ gibi çalışmıyordu “inout” bu fonksiyon bittiğinde dahi değişen değerlerinizi kalıcı yaparak size avantaj sağlar.Bu nedenle bu değişim geliştiricilere büyük bir avantaj sağlayacaktır.

 

Debug tanımlamalarının isimlerindeki değişiklikler

Derleyici tarafından otomatik olarak dosya numarası,satır numarası ve fonksiyon adları debug modunda Xcode tarafından size gösterilmektedir

Swift 2.1 ve eski versiyionlardaki _FILE_, _LINE_, _COLUMN_, ve _FUNCTION_

gibi tanımlar artık yerine aşağıdaki tanımlara bırakıyor.

#file, #line, #column ve #function

 

String Selector ‘ler artık doğru ismi ile yazılmalı

Müthiş bir yenilik!.. Örnekle açıklayacak olursak;

navigasyon.sagbuton = UIBarButtonItem(title: "bas!!", style: .Plain, target: self, action: "buttonabassildi")

Farkettiyseniz action için olan metod adımı buttonabassıldı yaptık, fakat doğrusu butonabasıldı olması gerekiyor Swift 2.2 ile artık string selector’leri rastgele yazmamız önlendi,daha doğrusu hata yaptığımız an uyarı alacağız ve doğru şekilde yazabileceğiz.

Ör:


navigasyon.sagbuton = UIBarButtonItem(title: "bas!!", style: .Plain, target: self, action: #selector(ViewController.butonabasildi))

 

Derleyici eski yeni kodları algılayıp size uyarı verecek

Xcode’un bu özellikliği belki birçoğumuza gereksiz gelebilir fakat kütüphane yazan her programcı için çok faydalı bir eksik giderilmiş. Kodlarınızı derledikten sonra Xcode size konsol ekranından uyarıda bulursa şaşırmayın deriz

Kütüphane oluştururken özellikle bu şekilde yazmanızı tavsiye ediyoruz.

#if swift(>=2.2)

print(" Swift 2.2 veya daha yüksek bir versiyon kullanıyorsunuz")

#else

print(" Swift 2.1 veya daha eski bir versiyon kullanıyorsunuz")

#endif

 

Bir yazımızın daha sonuna geldik. Swift son hızla kendini geliştirmeye ve geliştiriciler için kendisini olabildiğince basitleştirmeye çalışıyor. Geleceği Yazanlar ekibi olarak gelişmeleri sizlerle buradan paylaşmaya devam edecek ve elimizden geldiğince gelişmeleri kolay ve anlaşılır hale getireceğiz. Kafanızda soru işareti kalmaması adına bu yazımızın altına veya soru-cevap bölümümüze bu konuda veya başka konularda aklınıza takılan herhangi bir sorunuz var ise sorabilirsiniz.

 

 Herkese faydalı olması dileğiyle!

 

Yorumlar

İSMAİL GÜNEŞ
08.07.2016 - 08:24

Baba Paul Hudson 'un videosu derlenmiş  :)

https://www.youtube.com/watch?v=Swgf39f_Q5E 

Kağan Utku Kılıçlı
20.04.2016 - 09:36

Umarım her güncellemede bizi böyle bir makale karşılar.

Daha fazla swift içeriği için sabırsızlanıyoruz :)

Niyazi Tanyıldız
21.04.2016 - 11:12

elinize sağlık.

C stili döngülerin 3. örneğinde reverse() metodu eksik kalmış.

Burak
21.04.2016 - 12:08

Uyarın için teşekkürler,belli aralıklarla artan for döngüsünün daha iyi anlaşılması için, ekstra örnek eklendi.

m
21.04.2016 - 08:13

Sanırım bir yanlışlık var.

"2010 yılından beri Swift'i farklılaştıran özelliklerden birisi olan tuple splat’e de artık veda ediyoruz. Birçok programcı tarafından nadiren kullanılan “tuple splat” sözdizimi şu şekilde idi;"

Swift 2014 de duyuruldu.
__________________

"Farkettiyseniz action için olan metod adımı buttonabassıldı yaptık, fakat doğrusu butonabasıldı olması gerekiyor Swift 2.2 ile artık string selector’leri rastgele yazmamız önlendi,daha doğrusu hata yaptığımız an uyarı alacağız ve doğru şekilde yazabileceğiz."

Dediğiniz yerde #selector olarak düzeltmeniz gerek.

Bu yazıları gitbook gibi bir yere taşımayı düşünür mü geleceği yazanlar. Bu sayede herkes katkı sağlayabilir.

Omer
22.04.2016 - 09:45

Selam güzel yazı olmus. 

Yukarda paylasılan, asagıdaki örnekte i > 10 yerine i < 10 yazılacaktı sanırım. Düzeltilmesinde fayda var.

  • Eski Swift(Swift 2.1 ve daha eski sürümler);
  • for (var i = 0; i > 10 ; i = i + 2) {
  •        print("\(i) tane mavi kutu")
  • }
  • Yeni Swift(Swift 2.2);
  • for i in 0.stride(to: 10, by: 2) {
  •         print("\(i) tane mavi kutu")
  • }
Burak
22.04.2016 - 10:09

Merhaba Bize bu konuda yorum yaptığın için teşekkürler 1.Tuple splat ile ilgili bir hata söz konusu değildir. Tuple splat 2010 'dan beri kullanılmaktadır. 2.Bu konuda çok soru işareti var ama biz en doğru halini yazıp yeniden düzenleme yaptık.

Burak
22.04.2016 - 10:23
Merhaba, teşekkürler yorumun için hemen düzeltiyoruz.