SORU
4 HAZİRAN 2014, ÇARŞAMBA


Swift String içinde karakter bulma dizini

Yenilgiyi kabul etme zamanı geldi.

Objective-C, gibi bir şey kullanabilirsiniz:

NSString* str = @"abcdefghi";
[str rangeOfString:@"c"].location; // 2

Swift, benzer bir şey görüyorum:

var str = "abcdefghi"
str.rangeOfString("c").startIndex

...ama bu sadece benim bir özgün dize içine indis için kullanabileceğiniz String.Index verir, ama bir yer açamadı.

String.Index doğru değeri olan özel bir ıvar _position) hastalığına yakalandığını FWIW,. Ben sadece ortaya bir neden göremiyorum.

Kolayca Dize bunu kendime ekleyebilirim biliyorum. Bu yeni API neler kaçırdığımı merak ediyorum.

CEVAP
5 HAZİRAN 2014, PERŞEMBE


Çözüm bulamayan tek kişi sen değilsin.

String RandomAccessIndex uygulamak değil. Farklı bayt uzunluktaki karakter sağlar çünkü muhtemelen. countElements karakter sayısını elde etmek için kullanmak gerekir. O da pozisyonları için geçerlidir. _position muhtemelen bayt ham diziye bir göstergesidir ve bunu ifşa etmek istemiyorlar. String.Index karakterleri ortasında bayt erişmesini bizi korumak içindir.

O herhangi Endeksi String.startIndex String.endIndex (String uygulayan BidirectionalIndex) oluşturulması gerektiği anlamına gelir. Diğer endeksleri succ pred yöntemleri kullanarak oluşturulabilir.

Şimdi endeks ile bize yardımcı olmak için fonksiyonları bir dizi var:

let text = "abc"
let index2 = advance(text.startIndex, 2) //will call succ 2 times (facepalm)
let lastChar: Character = text[index2] //now we can index!

let range = text.rangeOfString("b")
var index: Int = distance(text.startIndex, range.startIndex) //will call succ/pred several times (facepalm)

Cidden dizeleri performansı hakkında endişeliyim. Ayrıca, String.Index ile çalışan hantal.

Bu uygulama aralıkları bir dize için oluşturulan güvenilir bir şekilde, örneğin: farklı bir dize için kullanılan bir sorun olduğunu unutmayın

var text: String = "abc"
var text2: String = "&

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CommonArtisan

    CommonArtisa

    7 Temmuz 2012
  • Eric Magidson

    Eric Magidso

    4 Ocak 2009
  • Floortile83

    Floortile83

    16 Ocak 2010