2015-04-11 23 views
32

स्विफ्ट के पिछले संस्करण में, मेरे पास निम्न कोड था।स्विफ्ट 1.2 में स्ट्रिंग लम्बाई और स्विफ्ट 2.0

func myfunc(mystr: String) { 
    if mystr.utf16Count >= 3 { 

स्विफ्ट 1.2 की नवीनतम रिलीज के साथ, अब मुझे निम्न त्रुटि मिलती है।

'utf16Count' is unavailable: Take the count of a UTF-16 view instead, i.e. count(str.utf16) 

ठीक है, इसलिए मैं अपना कोड निम्नानुसार बदलता हूं।

func myfunc(mystr: String) { 
    if count(mystr.utf16) >= 3 { 

लेकिन यह काम नहीं करता है। अब मुझे इसके बजाय निम्न त्रुटि संदेश मिलता है।

'(String.UTF16View) -> _' is not identical to 'Int16' 

स्विफ्ट 1.2 के साथ स्ट्रिंग की लंबाई प्राप्त करने का सही तरीका क्या है?

+0

से नकल सही गिनती पर क्लिक करें, और "परिभाषा पर जाएं "। – gnasher729

+0

टिप के लिए धन्यवाद। – Molanda

उत्तर

85

आप एक्सटेंशन का उपयोग कर सकते हैं के लिए इसे पसंद:

extension String { 
    var length: Int { return count(self)   } // Swift 1.2 
} 

और आप इसका इस्तेमाल कर सकते हैं:

if mystr.length >= 3 { 

} 

या आप सीधे इस तरह से भरोसा कर सकते हैं:

if count(mystr) >= 3{ 

} 

और यह है मेरे लिए भी काम कर रहा है:

if count(mystr.utf16) >= 3 { 

} 

लिए स्विफ्ट 2.0:

extension String { 
    var length: Int { 
     return characters.count 
    } 
} 
let str = "Hello, World" 
str.length //12 

एक और विस्तार:

extension String { 
    var length: Int { 
     return (self as NSString).length 
    } 
} 
let str = "Hello, World" 
str.length //12 

आप प्रत्यक्ष उपयोग करना चाहते हैं:

let str: String = "Hello, World" 
print(str.characters.count) // 12 

let str1: String = "Hello, World" 
print(str1.endIndex) // 12 

let str2 = "Hello, World" 
NSString(string: str2).length //12 
+0

हाँ मैं ओपी की त्रुटि को समझ नहीं पा रहा हूं, यह मेरे लिए भी काम कर रहा है। – Schemetrical

+0

सुझाव के लिए धन्यवाद। गिनती के साथ भी (mystr) मुझे त्रुटि दिखाई देती है '(स्ट्रिंग) -> _' 'Int16' के समान नहीं है। – Molanda

+1

आह, मैंने पाया। NSManagedObject आधारित वर्ग में "गिनती" नामक एक फ़ील्ड था जिसे Int16 के रूप में परिभाषित किया गया था जो वैश्विक गणना फ़ंक्शन को ओवरराइड कर रहा था। सैनिटी चेक के लिए धन्यवाद। – Molanda

2

count(mystr) सही तरीका है, आपको एन्कोडिंग को बदलने की आवश्यकता नहीं है।

यह: यह एक पुराने जवाब है: if count(mystr.utf16) >= 3 के रूप में आप कर Int16(3)

संपादित रूप में लंबे समय ठीक है। ओपी ने स्विफ्ट 2 को प्रतिबिंबित करने के लिए अपने प्रश्न को अद्यतन किया और उपर्युक्त उत्तर सही है।

+0

सुझाव के लिए धन्यवाद, लेकिन इससे मुझे त्रुटि मिलती है '(स्ट्रिंग) -> _' 'Int16' के समान नहीं है। – Molanda

+0

स्विफ्ट 2 में ऐसा करने के लिए अनुशंसित तरीका नहीं है, इसके बजाय उपरोक्त @ धर्मेश चेनी के उत्तर को देखें। –

+0

@ किंग-विज़ार्ड मुझे पता है, मैंने इसे आधा साल पहले देखा था। – Schemetrical

23

आप पात्रों संपत्ति का उपयोग करना होगा प्रॉपर्टी वाला गिनती:

yourString.characters.count

6

यहाँ सब एक में है - here

let str = "Hello" 
let count = str.length // returns 5 (Int) 

extension String { 
    var length: Int { return countElements(self) } // Swift 1.1 
} 
extension String { 
    var length: Int { return count(self)   } // Swift 1.2 
} 
extension String { 
    var length: Int { return characters.count } // Swift 2.0 
} 
संबंधित मुद्दे