Objective C İçinde Swift Kullanmak

Merhaba, bu yazımda Objective C projesi içerisinde Swift kodu yazmayı anlatacağım.

 

Giriş

Bildiğiniz üzere Objective C 30 küsür yaşında olmasına rağmen henüz ölmemiş bir dil. Stabil çalışıyor; bir çok kaynak var, binlerce geliştirici tarafından benimsenmiş ve kolay kolay Swift’e taşınamayacak kadar büyük Objective C ile yazılmış birçok yazılım ürünü var.

 

Kaynak: Cheesecake Labs

 

Öte yandan Swift dünyanın en popüler dilleri arasına girdi; arkasında muhteşem bir topluluk duruyor, syntax i kolay, uygulama güvenli geliştirilsin, patlamasın diye birçok kontrol mekanizması mevcut ve ileriki yıllarda tamamen Objective C nin yerini alacak.

 

Hal böyle olunca şu an için ikisinden de kopamıyoruz ve iki dili de aynı projede kullanma ihtiyacı hissediyoruz.

Şimdi isterseniz Objective C içinde Swift Kullanmak nasıl oluyor, öğrenelim.

 

Örnek Proje

SingleView bir Objective C projesi yaratalım.

 

 

Bunun eski bir Objective C projesi olduğunu düşünürsek ismine MyOldProject diyebiliriz sanırım 🙂

 

Projenin içine bir .swift dosyası ekleyelim Create Bridging Header diyelim. Class adına MySwiftClass adını verdim.

 

 

Bridging header ı oluştursun fakat içini boş bırakacağız.

Swift sınıfının içine girelim ve aşağıdaki gibi bir metod yazalım:

 

 

Farkettiyseniz bu sınıfta orijinal bir Swift projesinden farklı olarak kullandığımız @objc ön eki var.

ObjectiveC projesinin Swift sınıfını tanıyabilmesi için bu ön eki koymamız gerekiyor.

Keza aynı şekilde swift metodlarının tanınabilmesi için de metodların önüne @objc ekini koyuyoruz.

 

Şimdi proje sayfasına gelelim, target üzerine gelelim ve Build Settings başlığı altında “Always Embed Swift Standard Libraries” değerini YES ile değiştirelim.

 

Bu ayar Objective C İçinde Swift Kullanmak için önemli bir adımdı. Böylelikle Objective C projesinde swift kodu kullanmamıza izin vermiş olduk.

 

Bildiğiniz gibi Objective C projesi üzerinde çalışırken dahil etmek istediğimiz sınıfın header dosyasını çalıştığımız sınıfın içinde import ederizki onu tanısın.

Fakat Swift yazarken bir şey import etmiyorduk çünkü zaten bütün sınıflar birbirini tanıyordu.

Şimdi biz ne yapacağızda Swift ile yazdığımız sınıfın Objective C ile yazılmış sınıf tarafından tanınmasını sağlayacağız?

 

Xcode bu problemi çözmek için yalancıktan bir header dosyası oluşturmuş. Aslında fiziksel olarak böyle bir dosya bulunmuyor fakat build sırasında oluşturuyor. Eğer bu header dosyasının adını bilirsek ve Objective C sınıfının içinde bu header ı import edersek sorun çözülmüş olacak.

 

Header ismini öğrenmek için yine target seçili iken arama bölümünde “Objective-C Generated Interface Header Name” ismini aratalım.

 

Burada import etmemiz gereken header dosyasının ismini görüyoruz. Bir değişiklik yapmayacağız, sadece bu ismi kullanacağız.

Farkettiyseniz format şu şekilde “ProjeAdı-Swift.h”

Yani proje ismi verdikten sonra -Swift.h ekliyor. Her oluşturduğunuz Objective C projesi için swift header ismine bakmanıza gerek yok; söylediğim format aklınızda kalsın yeterli 🙂

 

Şimdi ViewController.m sınıfına dönelim ve swift header ını import edelim.

 

Import ederken alışık olduğumuz gibi auto-complete yapmayacak o yüzden endişelenmeyelim.

Ayrıca auto-complete denerken bridging-header diye bir şey koymaya çalışacak, bunu yapmayın.

 

Son olarak swift sınıfından bir obje yaratalım ve içindeki metodu çağıralım.

 

Sonuç

 

Bütün işlem bu kadardı. Şimdi projeyi derleyip başlattığımızda Swift kodunun Objective C projesinde başarıyla çalıştığını göreceğiz.

 

Vakit ayırıp okuduğunuz için teşekkürler.

 

Projenin kaynak koduna buradan erişebilirsiniz.

 

İyi kodlamalar 💻

 

Kimler Neler Demiş?

avatar
  Subscribe  
Bildir