İlk kullanım kolaylığı, ikinci formatlama
String format belirticileri Doc’tan Apple’ı sevmek için hepimiz büyüdük ve NSString’de pişirildiği için Objective-C’de kullanımı çok kolaydı. İşte yapabileceğiniz bir şey:
NSLog(@"The current time is %02d:%02d", 10, 4);
Standart dizge enterpolasyonu Swift’de faydalı olsa da, format belirticilerin tüm gücü enterpolasyon sözdizimi kullanılarak kullanılamaz. Neyse ki, String
beta türü sırasında format belirticileri türe eklenmiştir . Swift String
türünden bu hakkı NSString
yapamasak da, hedeflerimizi gerçekleştirmek için kolayca kullanabiliriz .
let timeString = String(format: "The current time is %02d:%02d", 10, 4)
Ve Swift’de birbirleriyle değiştirilebilir NSString
ve String
birbirleriyle değiştirilebilir olduklarından, bir biçimlendiriciyi veya diğerini kolayca kullanabilir ve sonuçları doğrudan Objective-C veya Swift’e iletebilirsiniz.
IBAction ve IBOutlet
Film şeridini özel kodunuza bağlama
Gitti .h ve .m dosyaları arasında ileri geri geçiş günleri! Sınıf başına tek bir dosyanın somut faydalarından biri, IBAction ve IBOutlet beyanlarına kolay erişimdir.
Objective-C’de .h muhtemelen bundan biraz daha fazlasına sahip olurdu:
@interface MyViewController: UIViewController
@property (weak) IBOutlet UIButton *likeButton;
@property (weak) IBOutlet UILabel *instructions;
- (IBAction)likedThis:(id)sender;
@end
Ve daha sonra, isimleri değiştirmek için storyboard’larla oynarken sürekli olarak .h dosyanızı incelemelisiniz. Falan.
Sadelik kuralları hızlı. Film şeridinize erişilmesini istediğiniz bir özellik tanımladıysanız, @IBOutlet
özelliği özellikten önce eklemeniz yeterlidir . Benzer şekilde @IBAction
film şeridi eylemlerini tekrar koda bağlamak için.
class MyViewController: UIViewController {
@IBOutlet weak var likeButton: UIButton?
@IBOutlet weak var instruction: UILabel?
@IBAction func likedThis(sender: UIButton) {
...
}
}
Hızlıca uygulayabileceğiniz başka ilginç özellikler de var ama şimdilik bu iki ortak arayüz oluşturucuyu ele alacağız. İki yeni arayüz oluşturucu özelliği vardır @IBDesignable
ve @IBInspectable
bunların kullanımı buna çok benzer olduğu için muhtemelen kapsamayacağımız şeyler vardır.
JSON Serileştirme
Swift için güncellenmesi muhtemel yöntemler için yüksek puanlar aldı
JSON seri hale getirme Swift’in temelde bir nedenden ötürü değişmedi: Temel nesnelerde, Objective-C’de olduğu gibi gerçekleşiyor. Sonuçları aldığımızda, kısa süre sonra göreceğimiz verilerle başa çıkmak için biraz farklı modeller var.
Amaç-C’deki temel bilgiler:
NSData *data = ...some data loaded...;
NSError *jsonError = nil;
NSDictionary *decodedData = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];
if (!jsonError) {
NSLog(decodedData[@"title"]);
}
Çok sayıda kazan plakası, ancak yine de oldukça basit. Şimdi aynı, Swift’de:
let data: NSData = ...some data loaded...
let jsonError: NSError?
let decodedJson = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &jsonError!) as Dictionary<String, AnyObject>
if !jsonError {
print(decodedJson["title"])
}
Evet, tıpkı biz bir geri almak için gittiğini bilmek zorunda kalmadan önce zamanki gibi NSDictionary
gelen JSONObjectWithData:options:error:
, hala gelen dönüşünü döküm zorunda AnyObject
bir etmek Dictionary<String, AnyObject>
(veya uygun olursa olsun tipi). JSON ile çalışmanın tehlikeleri bunlar. Daha genel bir durum için kullanmadan önce iade türünü inceleyebiliriz, ancak beklenen türü zaten bildiğiniz zaman muhtemelen yukarıdaki basit örneği kullanacaksınız.
Ama ne! &
Serileştirme çağrısına bir işaretçi iletmek için yine de kullanmak zorundayız ! Bu oldukça Swifty ve Apple’ın Swift’i dahili olarak kullandığı bir geleceğin bize daha Swifty API çağrıları sağlayacağından şüpheliyim. Şimdilik, en azından, &
buranın aslında bir işaretçi (hızlıca işaretçiler yoktur) anlamına gelmediğini, daha çok inout
değişken olduğunu anlayın . inouts
sadece işlevlerin, iletilen parametreleri değiştirebileceklerini bilmelerine izin veren işaretçilerdir. Stil oldukça C benzeridir, bu yüzden neden Swift dilinin içinde bulunduğunu merak ediyorum.
Tablo Hücrelerini Temizleme
Objective-C cihazını Swift koduna çevirmek her zaman zor değildir
Hey! Dinleyin! Bu makale, ilk olarak iOS 6 döneminden döndürülen downcasting opsiyonları hakkında yayınlandığı için önemli ölçüde değişmiştir dequeueReusableCellWithIdentifier:
. O zamandan beri, dequeueReusableCellWithIdentifier:forIndexPath:
her zaman bir hücre döndüren doğru kullanımı içerecek şekilde değiştirdim, böylece ziyaretçiler ilk bakışta kullanılacak doğru kodu bilirler.
Bir masanın (ya da koleksiyonun) hücresinin boşaltılması neredeyse tamamen UIKit API çağrılarıdır ve doğrudan Swift’e çevrilir. İOS 7’den beri, storyboard’da bir prototip hücresine sahip olduğumuz veya registerClass:forCellWithReuseIdentifier:
/ birini kullandığımız sürece garantili bir hücreyi temizlemeyi başardıkregisterNib:forCellWithReuseIdentifier:
.
İlk olarak, Amaç-C’de:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
cell.textLabel.text = @"A cell";
return cell;
}
Oldukça basit, tekrar kullanılabilir bir hücreyi ayırın ve beğeninize göre özelleştirin. Ardından hücreyi istediğiniz gibi iade edin. Swift’de aynı şey:
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as UITableViewCell
cell.textLabel.text = "A cell"
return cell
}
Bu, Objective-C’den Swift’e gelen insanlar için büyük bir noktaya dikkat çekiyor ve sık sık yeniden ifade edeceğim: API’ler değişmedi (ya da çok az değişti) ve bunları daha önce yaptığınız gibi kullanabilirsiniz. Swift sözdizimine geçiş yapmak en zor kısımdır, özellikle Swift’de hatırladığınız tüm Objective-C yöntemlerini zihinsel olarak çevirmek.
Bu durumda, optimum koda ulaşmak için Swift’deki yeni yapılar hakkında fazla düşünmek zorunda değiliz. Objective-C’de kullandığımız yaklaşım ile Swift-benzeri yaklaşımlar arasındaki denge, özellikle Swift’in bu ilk birkaç ayında, geliştiriciler olarak işimizin önemli bir parçasıdır.