peringatan: 'karakter' sudah usang: Silakan gunakan String atau Substring secara langsung

162

karakter - properti instance dari String, tidak digunakan lagi dengan Xcode 9.1

Itu sangat berguna untuk mendapatkan substring dari String dengan menggunakan charactersproperti tetapi sekarang sudah usang dan Xcode menyarankan untuk digunakan substring. Saya sudah mencoba memeriksa sekitar pertanyaan SO dan tutorial / pedoman pengembang apel untuk hal yang sama. Tetapi tidak bisa melihat solusi / alternatif seperti yang disarankan.

Ini pesan peringatan:

'karakter' sudah usang: Silakan gunakan String atau Substring

masukkan deskripsi gambar di sini

Saya sudah banyak operasi string dilakukan / ditangani menggunakan properti characters.

Adakah yang tahu / info tentang pembaruan ini?

Krunal
sumber
5
Berikut ini adalah artikel yang menarik tentang Stringperubahan dari Swift 3 ke 4 dan silakan baca juga SE0163
vadian
5
coba gunakan countsaja.
holex
1
Jika Anda menggunakan string.characters.forEachAPI baru adalahstring.forEach { char in process(char) }
Efren

Jawaban:

270

Swift 4 memperkenalkan perubahan pada string API.
Anda bisa menggunakan !stringValue.isEmptysajastringValue.characters.count > 0

untuk informasi lebih lanjut, Anda mendapatkan sampel dari sini

untuk mis

let edit = "Summary"
edit.count   // 7
songxunzhao
sumber
Terima kasih atas jawaban Anda .. Tapi bisakah saya memiliki referensi detail dari sub-string. Ini hanya contoh contoh, saya sudah banyak operasi lain yang berurusan dengan karakter
Krunal
1
Silakan periksa informasi detail dari sini. developer.apple.com/library/content/documentation/Swift/…
songxunzhao
biarkan salam = "Halo, dunia!" misalkan index = greeting.index (dari: ",") ?? greeting.endIndex biarkan awal = ucapan [.. <index]
songxunzhao
1
Referensi online untuk Substring .
Dennis Vennink
32
Jangan pernah menggunakan hitungan> 0 untuk memeriksa apakah koleksi kosong. Ada properti di Collection bernama isEmpty tepatnya untuk itu. Dari dokumen Ketika Anda perlu memeriksa apakah koleksi Anda kosong, gunakan properti isEmpty alih-alih memeriksa bahwa properti hitung sama dengan nol. Untuk koleksi yang tidak sesuai dengan RandomAccessCollection, mengakses properti hitung yang diulang melalui elemen koleksi.
Leo Dabus
82

Swift 4 vs Swift 3 contoh:

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
Mohammad Sadegh Panadgoo
sumber
2
Ini harus menjadi jawaban yang diterima. Pertanyaannya adalah tentang penggantian untuk string.characters.count, bukan pengganti untuk membandingkan dengan nol; yang hanya disebutkan di tangkapan layar.
Timothy Kanski
9

Salah satu kasus paling umum untuk memanipulasi string adalah dengan respons JSON. Dalam contoh ini saya membuat ekstensi di aplikasi arloji saya untuk menjatuhkan (n) karakter terakhir dari objek Bitcoin JSON.

Swift 3:

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

Pesan Kesalahan Xcode 9.1:

'karakter' sudah usang: Silakan gunakan String atau Substring secara langsung

Xcode memberitahu kita untuk menggunakan variabel string atau metode secara langsung .

Swift 4:

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

Ekstensi lengkap:

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

    var dropLast: String {
        return dropLast()
    }
}

Panggilan:

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

Menghibur:

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

Contoh tambahan:

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

Dokumentasi:

Anda akan sering menggunakan metode umum seperti dropLast()atau removeLast()atau countjadi di sini adalah Apple dokumentasi eksplisit untuk setiap metode.

droplast ()

removelast ()

menghitung karakter

Edison
sumber
2

Peringatan itu hanyalah puncak gunung es, ada banyak perubahan string, string lagi-lagi adalah kumpulan karakter, tapi kami mendapatkan sesuatu yang baru dan keren, substrings :)

Ini adalah bacaan yang bagus tentang ini: https://useyourloaf.com/blog/updating-strings-for-swift-4/

Boris
sumber
2

Gunakan ini characterskarena Stringberhenti menjadi koleksi di Swift 2.0. Namun hal ini masih berlaku kode di Swift 4 tapi tidak lagi diperlukan sekarang Stringadalah Collectionlagi.

Misalnya Swift 4 Stringsekarang memiliki properti hitung langsung yang memberikan jumlah karakter:

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

Contoh untuk String dan SubString.

Tali

Swift 4 Stringsekarang langsung mendapatkan Elemen yang memberikan karakter pertama dari String:(string.characters.first)

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

Substring

Menggunakan SubString dapatkan karakter pertama.

let spstring = "Welcome"
let indexStartOfText = spstring.index(spstring.startIndex, offsetBy: 1)
let sub = spstring.substring(to: indexStartOfText)
print(sub) //W
Pranavan Sp
sumber
Saya ingin mendapatkan karakter pertama dari string jadi saya ingin tahu cara mana yang harus saya gunakan, let firstElement = spString.first atau Substring?
Pulkit
1
@ Pulkit Lebih baik digunakan .firstkarena jika string ""kosong. itu hanya akan mengembalikan nol tetapi substringakan menghasilkan kesalahan.
Pranavan Sp
cara mengubah baris kode ini menjadi swift 4 'AuthorImageText = String (val.characters [(AuthorName.startIndex)]). capitalized'
Pulkit
@Pulkit hanya menghapus .characterscukup
Pranavan Sp
0

Anda juga dapat menggunakan kode ini untuk pengelompokan kamus tanpa menggunakan {$ 0.characters.first! }.

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)
mahendra solanki
sumber
0

Hapus saja karakter Misalnya:

stringValue.characters.count ke stringValue.count

Ayoub Bouya
sumber