स्विफ्ट 4 के लिए अपडेट
स्विफ्ट 4 में, फिर से String
अनुरूप है Collection
, इसलिए स्ट्रिंग्स की शुरुआत और छोर को ट्रिम करना dropFirst
और उपयोग करना संभव है dropLast
। परिणाम प्रकार का है Substring
, इसलिए आपको पास करने के लिए String
निर्माणकर्ता को पास करना होगा String
:
let str = "hello"
let result1 = String(str.dropFirst()) // "ello"
let result2 = String(str.dropLast()) // "hell"
dropFirst()
और ड्रॉप करने के लिए वर्णों की संख्या निर्दिष्ट करने के लिए dropLast()
भी एक लें Int
:
let result3 = String(str.dropLast(3)) // "he"
let result4 = String(str.dropFirst(4)) // "o"
यदि आप स्ट्रिंग में हैं की तुलना में ड्रॉप करने के लिए अधिक वर्ण निर्दिष्ट करते हैं, तो परिणाम रिक्त स्ट्रिंग ( ""
) होगा।
let result5 = String(str.dropFirst(10)) // ""
स्विफ्ट 3 के लिए अपडेट
यदि आप केवल पहले चरित्र को हटाना चाहते हैं और मूल स्ट्रिंग को जगह में बदलना चाहते हैं, तो @ मिकमैकल्लम का उत्तर देखें। यदि आप प्रक्रिया में एक नया स्ट्रिंग बनाना चाहते हैं, तो उपयोग करें substring(from:)
। एक विस्तार के साथ करने के लिए String
, आप की कुरूपता को छुपा सकते हैं substring(from:)
और substring(to:)
शुरू करने और एक के सिरों ट्रिम करने के लिए उपयोगी बनाने के लिए अतिरिक्त String
:
extension String {
func chopPrefix(_ count: Int = 1) -> String {
return substring(from: index(startIndex, offsetBy: count))
}
func chopSuffix(_ count: Int = 1) -> String {
return substring(to: index(endIndex, offsetBy: -count))
}
}
"hello".chopPrefix() // "ello"
"hello".chopPrefix(3) // "lo"
"hello".chopSuffix() // "hell"
"hello".chopSuffix(3) // "he"
उनके पहले dropFirst
और dropLast
बाद की तरह , ये फ़ंक्शन क्रैश हो जाएंगे यदि स्ट्रिंग में पर्याप्त पत्र उपलब्ध नहीं हैं। फोन करने वाले को ठीक से उपयोग करने के लिए ओनस है। यह एक वैध डिजाइन निर्णय है। कोई उन्हें एक वैकल्पिक लौटाने के लिए लिख सकता है, जिसे कॉल करने वाले को अलिखित करना होगा।
स्विफ्ट 2.x
स्विफ्ट 2 में काश , dropFirst
और dropLast
(पिछले सबसे अच्छे समाधान) पहले की तरह सुविधाजनक नहीं हैं। के विस्तार के साथ String
, आप की बदसूरती छिपा सकते हैं substringFromIndex
और substringToIndex
:
extension String {
func chopPrefix(count: Int = 1) -> String {
return self.substringFromIndex(advance(self.startIndex, count))
}
func chopSuffix(count: Int = 1) -> String {
return self.substringToIndex(advance(self.endIndex, -count))
}
}
"hello".chopPrefix() // "ello"
"hello".chopPrefix(3) // "lo"
"hello".chopSuffix() // "hell"
"hello".chopSuffix(3) // "he"
उनके पहले dropFirst
और dropLast
बाद की तरह , ये फ़ंक्शन क्रैश हो जाएंगे यदि स्ट्रिंग में पर्याप्त पत्र उपलब्ध नहीं हैं। फोन करने वाले को ठीक से उपयोग करने के लिए ओनस है। यह एक वैध डिजाइन निर्णय है। कोई उन्हें एक वैकल्पिक लौटाने के लिए लिख सकता है, जिसे कॉल करने वाले को अलिखित करना होगा।
में स्विफ्ट 1.2 , आप कॉल करने की आवश्यकता होगी chopPrefix
इस तरह:
"hello".chopPrefix(count: 3) // "lo"
या आप _
पैरामीटर नाम को दबाने के लिए फ़ंक्शन परिभाषाओं में एक अंडरस्कोर जोड़ सकते हैं :
extension String {
func chopPrefix(_ count: Int = 1) -> String {
return self.substringFromIndex(advance(self.startIndex, count))
}
func chopSuffix(_ count: Int = 1) -> String {
return self.substringToIndex(advance(self.endIndex, -count))
}
}
advance
कास्टिंग करके पूरी बात से बच सकते हैंdisplay.text!
। मैं यह नहीं कह रहा हूं कि यह एक अच्छा समाधान है - बस एक गलत धारणा को सुधारना। NSString के साथ, आप इसे Int के साथ अनुक्रमित कर सकते हैं । - और जिस कारण से आप Int के साथ अनुक्रमण नहीं कर सकते, वह यूनिकोड के कारण नहीं है; ऐसा इसलिए है क्योंकि एक वर्ण में कई यौगिक कोडपॉइंट हो सकते हैं।