uyarı: 'karakterler' kullanımdan kaldırıldı: Lütfen doğrudan String veya Substring kullanın


162

karakterleri - String örnek örneği, Xcode 9.1 ile kullanımdan kaldırıldı

charactersÖzelliği kullanarak String'den bir alt dize almak çok yararlı oldu, ancak şimdi kullanımdan kaldırıldı ve Xcode kullanmayı önerdi substring. Aynı SO sorular ve elma geliştirici öğreticiler / yönergeleri etrafında kontrol etmeye çalıştım. Ancak önerildiği gibi herhangi bir çözüm / alternatif göremedim.

İşte uyarı mesajı:

'karakterler' kullanımdan kaldırıldı: Lütfen Dize veya Alt Dize kullanın

resim açıklamasını buraya girin

Ben pek çok dize işlemleri gerçekleştirilir / özelliği kullanarak ele characters.

Bu güncelleme hakkında herhangi bir fikri / bilgisi olan var mı?


5
İşte Swift 3'ten 4'e değişiklikler hakkında ilginç bir makaleString ve lütfen ayrıca okuyun SE0163
vadian

5
kullanmayı deneyin count.
holex

1
string.characters.forEachYeni API kullanıyorsanızstring.forEach { char in process(char) }
Efren

Yanıtlar:


270

Swift 4, dize API'sında değişiklikler yaptı.
Sadece kullanabilirsiniz !stringValue.isEmptyyerinestringValue.characters.count > 0

daha fazla bilgi için buradan örnek alırsınız

örneğin

let edit = "Summary"
edit.count   // 7

Cevabınız için teşekkürler .. Ama alt dizenin ayrıntılı referans alabilir miyim. Bu sadece örnek bir örnek, karakterlerle ilgili başka birçok
işlemim var

1
Lütfen ayrıntılı bilgileri buradan kontrol edin. developer.apple.com/library/content/documentation/Swift/…
songxunzhao

tebrik olsun = "Merhaba dünya!" dizin = tebrik.index (:: ",") ??
Greeting.endIndex Let Başlarken

1
Alt dize için çevrimiçi başvuru .
Dennis Vennink

32
Bir koleksiyonun boş olup olmadığını kontrol etmek için asla count> 0 kullanmayın. Koleksiyonda tam olarak bunun için isEmpty adlı bir özellik var. Dokümanlardan Koleksiyonunuzun boş olup olmadığını kontrol etmeniz gerektiğinde count özelliğinin sıfıra eşit olduğunu kontrol etmek yerine isEmpty özelliğini kullanın. RandomAccessCollection öğesine uymayan koleksiyonlar için count özelliğine erişmek koleksiyon öğelerinden yinelenir.
Leo Dabus

82

Swift 4 ve Swift 3 örnekleri:

let myString = "test"

for char in myString.characters {print(char) } // Swift 3
for char in myString { print(char) } // Swift 4

let length = myString.characters.count // Swift 3
let length = myString.count // Swift 4

2
Bu kabul edilen cevap olmalı. Soru, sıfıra karşılaştırmak yerine string.characters.count yerine koymakla ilgili; bu sadece ekran görüntüsünde belirtilmiştir.
Timothy Kanski

9

Dizeleri işlemek için en yaygın durumlardan biri JSON yanıtlarıdır. Bu örnekte, saat uygulamamda bir Bitcoin JSON nesnesinin son (n) karakterini bırakmak için bir uzantı oluşturdum.

Hızlı 3:

func dropLast(_ n: Int = 0) -> String {
    return String(characters.dropLast(n))

Xcode 9.1 Hata Mesajı:

'karakterler' kullanımdan kaldırıldı: Lütfen doğrudan String veya Substring kullanın

Xcode bize dize değişkenini veya yöntemini doğrudan kullanmamızı söylüyor .

Hızlı 4:

func dropLast(_ n: Int = 0) -> String {
    return String(dropLast(n))
    }

Komple Uzantı:

extension String {
    func dropLast(_ n: Int = 0) -> String {
        return String(dropLast(n))
    }

    var dropLast: String {
        return dropLast()
    }
}

Aramak:

print("rate:\(response.USDRate)")
let literalMarketPrice = response.USDRate.dropLast(2)
print("literal market price: \(literalMarketPrice)")

Konsol:

//rate:7,101.0888 //JSON float
//literal market price: 7,101.08 // JSON string literal

Ek Örnekler:

  • print("Spell has \(invisibleSpellName.count) characters.")
  • return String(dropLast(n))
  • return String(removeLast(n))

Belgeler:

Sık sık gibi yaygın yöntemlerle olacak dropLast()ya removeLast()ya countişte her yöntem için açık Elma belgelerdir.

Droplast ()

removelast ()

karakter sayma



2

Bunu kullanın charactersçünkü StringSwift 2.0 topluluğudur olmaktan çıktı. Ancak bu Swift 4'te hala geçerli kod ama şimdi artık gerekli değildir Stringbir olduğunu Collectiontekrar.

Örneğin, bir Swift 4 Stringartık karakter sayısını veren doğrudan bir count özelliğine sahiptir:

// Swift 4
let spString = "Stack"
spString.count           // 5

String ve SubString örnekleri.

sicim

Swift 4 Stringşimdi doğrudan String'in ilk karakterini veren Element'i alıyor:(string.characters.first)

let spString = "Stack"
let firstElement = spString.first   //S

Alt dize

SubString kullanarak ilk karakteri alın.

let spstring = "Welcome"
let indexStartOfText = spstring.index(spstring.startIndex, offsetBy: 1)
let sub = spstring.substring(to: indexStartOfText)
print(sub) //W

Ben ilk yolu string ilk karakter almak istiyorum, bu yüzden let firstElement = spString.first veya Substring hangi yolu kullanmalıyım bilmek istiyorum?
Pulkit

1
@Pulkit Kullanmak daha iyi .firstçünkü dize ""boşsa. sadece sıfır döndürür ancak substringhata üretir.
Pranavan Sp

Bu kod satırını swift'e dönüştürme 4 'AuthorImageText = String (val.characters [(AuthorName.startIndex)]). büyük
harfli

@Pulkit .charactersyeterli kaldır
Pranavan Sp

0

Bu kodu, {$ 0.characters.first! Komutunu kullanmadan sözlük gruplaması için de kullanabilirsiniz. }.

let cities = ["Shanghai": 24_256_800, "Karachi": 23_500_000, "Beijing": 21_516_000, "Seoul": 9_995_000]
let groupedCities = Dictionary(grouping: cities.keys) { $0.first! }
print(groupedCities)

0

Sadece karakterleri kaldırın Örneğin:

stringValue.characters.count - stringValue.count

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.