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?


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

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

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



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

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)

0

Hapus saja karakter Misalnya:

stringValue.characters.count ke stringValue.count

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.