Dize Biçimi Belirticileri | Swift

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:

İ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, Stringbeta türü sırasında format belirticileri türe eklenmiştir . Swift Stringtüründen bu hakkı NSStringyapamasak 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 NSStringve Stringbirbirleriyle 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 @IBActionfilm ş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 @IBDesignableve @IBInspectablebunları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 NSDictionarygelen JSONObjectWithData:options:error:, hala gelen dönüşünü döküm zorunda AnyObjectbir 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 inoutdeğişken olduğunu anlayın . inoutssadece 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.

Ne düşünüyorsun?

95 Points
Upvote Downvote

Kotlin’e Geçmek için Proje yöneticinizi ikna etmek

Bir kod parçasının zaman karmaşıklığını ölçmek, yürütme süresi açısından maliyetlerini tahmin ederek algoritmaları ve diğer işlev türlerini optimize etmek için kullanılan yaygın bir tekniktir.

Zaman Karmaşıklığı | Swift