चेतावनी: 'वर्ण' पदावनत किया गया है: सीधे स्ट्रिंग या स्ट्रिंग का उपयोग करें


162

अक्षर - स्ट्रिंग की एक उदाहरण संपत्ति, Xcode 9.1 के साथ निकाली गई है

charactersसंपत्ति का उपयोग करके स्ट्रिंग से एक विकल्प प्राप्त करना बहुत उपयोगी था, लेकिन अब इसे हटा दिया गया है और Xcode उपयोग करने का सुझाव देता है substring। मैंने एसओ प्रश्नों और ऐप्पल डेवलपर ट्यूटोरियल / दिशानिर्देशों को उसी के आसपास जांचने की कोशिश की है। लेकिन सुझाए अनुसार कोई समाधान / वैकल्पिक नहीं देख सका।

यहाँ चेतावनी संदेश है:

'वर्ण' पदावनत किया जाता है: कृपया स्ट्रिंग या सबस्ट्रिंग का उपयोग करें

यहां छवि विवरण दर्ज करें

मेरे पास इतने सारे स्ट्रिंग प्रॉपर्टी का उपयोग करके प्रदर्शन / संभाला हुआ है characters

किसी को भी इस अद्यतन के बारे में कोई विचार / जानकारी है?


5
यहाँ स्विफ्ट 3 से 4 के परिवर्तनों के बारे में एक दिलचस्प लेख हैString और कृपया SE0163
vadian

5
countइसके बजाय उपयोग करने का प्रयास करें ।
होलेक्स

1
यदि आप string.characters.forEachनए API का उपयोग कर रहे हैंstring.forEach { char in process(char) }
Efren

जवाबों:


270

स्विफ्ट 4 ने स्ट्रिंग एपीआई पर बदलाव पेश किए।
आप !stringValue.isEmptyइसके बजाय बस का उपयोग कर सकते हैंstringValue.characters.count > 0

अधिक जानकारी के लिए आप यहाँ से नमूना प्राप्त करें

उदाहरण के लिए

let edit = "Summary"
edit.count   // 7

आपके उत्तर के लिए धन्यवाद .. लेकिन क्या मेरे पास उप स्ट्रिंग का विस्तृत संदर्भ हो सकता है। यह सिर्फ नमूना उदाहरण है, मैंने वर्णों से निपटने के लिए कई अन्य ऑपरेशन किए हैं
क्रुणाल

1
कृपया यहाँ से विस्तार से जानकारी की जाँच करें। डेवलपर
.apple.com

चलो नमस्कार = "नमस्ते, दुनिया!" इंडेक्स = नमस्कार .index (of: ",") ?? अभिवादन
.endexexx

1
पदार्थ के लिए ऑनलाइन संदर्भ ।
डेनिस वेनिंक

32
संग्रह खाली है या नहीं यह जांचने के लिए कभी भी गिनती का उपयोग न करें कलेक्शन पर एक प्रॉपर्टी है जिसका नाम है Ismpty उसके लिए बिल्कुल। डॉक्स से जब आपको यह जांचने की आवश्यकता होती है कि आपका संग्रह खाली है, तो इस बात की जांच करने के बजाय कि खाली संपत्ति शून्य के बराबर है, आइसोमेट्री प्रॉपर्टी का उपयोग करें। संग्रह के तत्वों के माध्यम से गिनती संपत्ति तक पहुँचने, randomAccessCollection के अनुरूप नहीं है कि संग्रह के लिए।
सिंह डबस

82

स्विफ्ट 4 बनाम स्विफ्ट 3 उदाहरण:

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
यह स्वीकृत उत्तर होना चाहिए। सवाल string.characters.count के प्रतिस्थापन के बारे में है, शून्य की तुलना करने के लिए प्रतिस्थापन के बारे में नहीं; यह केवल स्क्रीनशॉट में उल्लिखित है।
टिमोथी कांसकी

9

स्ट्रिंग्स में हेरफेर के लिए सबसे आम मामलों में से एक JSON प्रतिक्रियाओं के साथ है। इस उदाहरण में मैंने बिटकॉइन JSON ऑब्जेक्ट के अंतिम (n) वर्णों को छोड़ने के लिए अपने वॉच ऐप में एक एक्सटेंशन बनाया।

स्विफ्ट 3:

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

Xcode 9.1 त्रुटि संदेश:

'वर्ण' पदावनत किया जाता है: सीधे स्ट्रिंग या सबस्ट्रिंग का उपयोग करें

Xcode हमें सीधे स्ट्रिंग चर या विधि का उपयोग करने के लिए कह रहा है ।

स्विफ्ट 4:

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

पूरा एक्सटेंशन:

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

    var dropLast: String {
        return dropLast()
    }
}

कॉल करें:

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

कंसोल:

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

अतिरिक्त उदाहरण:

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

प्रलेखन:

आप अक्सर इस तरह के रूप में आम तरीकों का उपयोग किया जाएगा dropLast()या removeLast()या countतो यहां प्रत्येक विधि के लिए स्पष्ट एप्पल प्रलेखन है।

droplast ()

removelast ()

गिनती के पात्र


2

यह चेतावनी सिर्फ हिमशैल के एक शीर्ष पर है, स्ट्रिंग परिवर्तनों की एक लूट थी, तार फिर से वर्णों का एक संग्रह है, लेकिन हम नए और शांत, सबस्ट्रिंग्स के बारे में सोच रहे थे :)

इस बारे में यह एक महान पढ़ा है: https://useyourloaf.com/blog/updating-strings-for-swift-4/


2

इसका उपयोग करें charactersक्योंकि Stringस्विफ्ट 2.0 में संग्रह होना बंद हो गया है। हालांकि यह अभी भी स्विफ्ट 4 में मान्य कोड है, लेकिन ये अब आवश्यक अब वह यह है कि Stringएक Collectionफिर से।

उदाहरण के लिए एक स्विफ्ट 4 में Stringअब एक सीधी गिनती गुण है जो वर्ण गणना देता है:

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

स्ट्रिंग और सबस्ट्रिंग के उदाहरण।

तार

स्विफ्ट 4 को Stringअब सीधे एलीमेंट मिलता है जो स्ट्रिंग का पहला चरित्र देता है:(string.characters.first)

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

सबस्ट्रिंग

सबस्ट्रिंग के प्रयोग से पहला चरित्र मिलता है।

let spstring = "Welcome"
let indexStartOfText = spstring.index(spstring.startIndex, offsetBy: 1)
let sub = spstring.substring(to: indexStartOfText)
print(sub) //W

मैं स्ट्रिंग का पहला चरित्र प्राप्त करना चाहता हूं, इसलिए मैं यह जानना चाहता हूं कि मुझे किस तरह का उपयोग करना चाहिए पहला आइलमेंट = spString.first या सबस्ट्रिंग?
पुलकित

1
@ पुलकित का उपयोग करने के लिए बेहतर है .firstक्योंकि यदि स्ट्रिंग ""खाली है। यह केवल शून्य लौटाएगा, लेकिन substringत्रुटि उत्पन्न करेगा।
प्राणवन Sp

कैसे तेजी से करने के लिए कोड की इस पंक्ति में परिवर्तित करने 4 'AuthorImageText = स्ट्रिंग (val.characters [(AuthorName.startIndex)]) पूंजीकृत।'
पुलकित

@Pulkit बस को निकालने के .charactersलिए पर्याप्त
Pranavan एसपी

0

आप इस कोड का उपयोग {$ 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)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.