Kata pengantar
Menambahkan fitur atau gula sintaks ke string teks adalah umum di berbagai bahasa pemrograman. Ambil bahasa C yang akrab dengan semua orang. String C pada dasarnya adalah array karakter, tetapi setiap kali Anda memasukkan string, Anda tidak perlu memasukkan ['h', 'e', 'l', 'l', 'o'], cukup tekan Halo, karena kompiler melakukan operasi ini untuk Anda.
Bahasa yang lebih canggih seperti Swift Handles string tidak hanya sebagai array karakter, string adalah tipe lengkap dan memiliki berbagai karakteristik. Mari pertama -tama lihat fitur String: Substring.
Lihatlah String
Pertama, mari kita ambil pemahaman kasar tentang implementasi string. Kode berikut berasal dari String.swift di perpustakaan standar:
String struct publik {public var _core: _stringcore}Tentu saja ada beberapa pengaturan inisialisasi lainnya, tetapi hanya ada atribut penyimpanan ini dalam deklarasi! Rahasianya harus di Stringcore.swift:
Public struct _stringcore {public var _baseaddress: unsafemutablerawpointer? var _countandflags: uint public var _Owner: anyObject?}Ada banyak hal lain dalam jenis ini, tetapi kami hanya fokus pada properti penyimpanan:
Situasi nyata _stringcore jauh lebih rumit daripada yang disebutkan di sini, tetapi konten di atas memudahkan untuk memahami beberapa informasi tentang string: penyimpanan internal dan ukuran string.
Substring
Bagaimana cara membuat substring di Swift? Cara termudah adalah mengambil paragraf dari string dengan subscript:
Biarkan str = "Hello Swift!" Biarkan Slice = str [str.StartIndex .. <str index = "" str = "" startIndex = "" nbsp = "" offsetby: = "" 5 = "" hello = ""> </str>
Meskipun sederhana, kodenya tidak terlihat terlalu elegan.
Indeks string bukan integer intuitif, sehingga indeks posisi selama pencegat perlu diperoleh dengan menggunakan startIndex dan index (_: offsetby :). Jika Anda mencegat dari posisi awal string, Anda dapat menghilangkan StartIndex:
Biarkan withpartialrange = str [.. <str index = "" str = "" startIndex = "" nbsp = "" offsetby: = "" 5 = "" still = "" hello = ""> </str>
Atau gunakan metode ini dalam pengumpulan:
Biarkan slice = str.prefix (5) // masih "halo"
Ingatlah bahwa string juga merupakan koleksi, sehingga Anda dapat menggunakan metode di bawah koleksi, seperti awalan (), sufiks (), dropFirst (), dll.
Prinsip -prinsip internal substring
Substring tempat ajaib adalah mereka menggunakan kembali memori string induk. Anda dapat memahami substring sebagai salah satu paragraf dari string induk.
Misalnya, jika Anda memotong 100 karakter dari string 8000 karakter, Anda tidak perlu menginisialisasi kembali ruang memori 100 karakter.
Ini juga berarti bahwa Anda dapat secara tidak sengaja memperpanjang siklus hidup string induk. Jika ada string besar, maka Anda baru saja mencegat segmen kecil, selama string segmen kecil yang dicegat tidak dilepaskan, string segmen besar tidak akan dilepaskan.
Bagaimana Substring Dilakukan?
Substring struct publik {internal var _slice: rangeReplaceableBIdirectionalSlice <string> </string>Atribut _slice internal menyimpan semua informasi tentang string induk:
// Masih di dalam substringinternal var _wholestring: string {return _slice._base} public var startIndex: index {return _slice.startIndex} public var endIndex: index {return _slice.endIndex}Hitung properti _wholestring (mengembalikan seluruh string induk), StartIndex dan EndIndex keduanya dikembalikan melalui _slice internal.
Ini juga dapat dilihat bagaimana Slice mengacu pada string induk.
Substring ke String
Akhirnya, mungkin ada banyak substring dalam kode, tetapi jenis parameter fungsi membutuhkan string. Proses konversi substring ke string juga sangat sederhana:
biarkan string = string (substring)
Karena substring berbagi ruang memori yang sama dengan string induknya, ditebak bahwa membuat string baru harus menginisialisasi ruang penyimpanan baru. Jadi apa proses inisialisasi string?
Extension String {public init (_ Substring: Substring) {// 1 let x = substring._wholestring // 2 let start = substring.startIndex let end = substring.endIndex // 3 let u16 = x._core [start.encodedoffset .. <end encodedoffset = "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "ifEON =" IFEON = "IFEOS =" IFEOS = "IFEOS =" IFEOS = "IFEOCE =" IFEOCE = "IFEOCE =" IFEOCE = "IFEOCE =" IFEOCE = "IFEOCE =" IFEOCE = Dalam: = "" x = "" unicodescalars = "" end = "" self = "" 4b = "" else = ""> </dl>Langkah -langkah untuk mengonversi substring menjadi string sangat sederhana, tetapi Anda mungkin ingin mempertimbangkan apakah Anda perlu melakukan ini. Apakah Anda memerlukan tipe untuk menjadi string saat melakukan operasi substring? Jika semua operasi pada substring perlu dikonversi menjadi string, maka substring ringan akan kehilangan artinya.
Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.