ใน Objective-C สำหรับ iOS ฉันจะลบอักขระตัวสุดท้ายของสตริงโดยใช้การกระทำแบบปุ่มได้อย่างไร
ใน Objective-C สำหรับ iOS ฉันจะลบอักขระตัวสุดท้ายของสตริงโดยใช้การกระทำแบบปุ่มได้อย่างไร
คำตอบ:
ในคลาสตัวควบคุมของคุณสร้างวิธีการดำเนินการที่คุณจะขอปุ่มถึงในตัวสร้างส่วนต่อประสาน ภายในวิธีนั้นคุณสามารถตัดแต่งสตริงของคุณดังนี้
if ([string length] > 0) {
string = [string substringToIndex:[string length] - 1];
} else {
//no characters to delete... attempting to do so will result in a crash
}
หากคุณต้องการวิธีการที่ยอดเยี่ยมในการทำโค้ดเพียงบรรทัดเดียวคุณสามารถเขียนมันเป็น:
string = [string substringToIndex:string.length-(string.length>0)];
* คำอธิบายของโค้ดขนาดหนึ่งบรรทัดแฟนซี:
หากมีอักขระที่จะลบ (เช่นความยาวของสตริงมากกว่า 0)
(string.length>0)
จะส่งคืน1
ดังนั้นการส่งคืนโค้ด:
string = [string substringToIndex:string.length-1];
หากไม่มีอักขระที่จะลบ (เช่นความยาวของ string มีค่าไม่เกิน 0)
(string.length>0)
ส่งคืน0
ดังนั้นจึงส่งคืนโค้ด:
string = [string substringToIndex:string.length-0];
ซึ่งป้องกันการล่ม
string != nil && [string length] > 0
เพื่อที่ว่าถ้าคำสั่งจะเทียบเท่ากับการขอให้ โอกาสที่ตัวแปรสตริงของ Donal ถูกปล่อยออกมา
หากเป็น NSMutableString (ซึ่งฉันอยากจะแนะนำเนื่องจากคุณเปลี่ยนมันแบบไดนามิก) คุณสามารถใช้:
[myString deleteCharactersInRange:NSMakeRange([myRequestString length]-1, 1)];
วิธีแก้ปัญหาที่ให้ในที่นี้จริง ๆ แล้วไม่ได้คำนึงถึงอักขระ Unicode หลายไบต์ ("อักขระที่ประกอบด้วย") และอาจทำให้สตริง Unicode ไม่ถูกต้อง
ในความเป็นจริงไฟล์ส่วนหัวของ iOS ซึ่งมีการประกาศsubstringToIndex
ประกอบด้วยความคิดเห็นต่อไปนี้:
คำแนะนำ: ใช้กับ rangeOfComposedCharacterSequencesForRange: เพื่อหลีกเลี่ยงการทำลายอักขระที่ประกอบขึ้น
ดูวิธีใช้rangeOfComposedCharacterSequenceAtIndex:
เพื่อลบอักขระตัวสุดท้ายอย่างถูกต้อง
เอกสารประกอบคือเพื่อนของคุณNSString
รองรับการโทรsubstringWithRange
ที่สามารถทำให้สตริงสั้นลงว่าคุณได้รับสตริงที่ย่อคืน คุณไม่สามารถแก้ไขอินสแตนซ์ของNSString
มันไม่เปลี่ยนรูป หากคุณมีNSMutableString
คือมีวิธีการที่เรียกdeleteCharactersInRange
ว่าสามารถปรับเปลี่ยนสตริงในสถานที่
...
NSRange r;
r.location = 0;
r.size = [mutable length]-1;
NSString* shorted = [stringValue substringWithRange:r];
...
substringWithRange:
NSString*
จดตัวชี้