2014-07-23 8 views
64

मैं इस लाइन पर संकलक त्रुटि मिलती है:स्विफ्ट में substringToIndex का उपयोग कैसे करें?

UIDevice.currentDevice().identifierForVendor.UUIDString.substringToIndex(8) 

प्रकार 'String.Index' प्रोटोकॉल के अनुरूप नहीं है 'IntegerLiteralConvertible'

मेरे इरादा-स्ट्रिंग प्राप्त करने के लिए है, लेकिन कैसे?

+0

और अधिक सुरुचिपूर्ण समाधान ** (** UIDevice.currentDevice() identifierForVendor.UUIDString ** के रूप में NSString।) ** substringToIndex (8) -। जरूरत के कनवर्ट यहां आने वाले लोगों के लिए शीर्षक पर आधारित प्रकार –

+1

, माना जाता डुप्लिकेट नहीं बहुत है उपयोगी। – Suragch

उत्तर

174

स्विफ्ट में, String इंडेक्सिंग ग्रैफेम क्लस्टर का सम्मान करता है, और IndexTypeInt नहीं है। आपके पास दो विकल्प हैं - स्ट्रिंग (आपका यूयूआईडी) को एनएसएसटींग में डालें, और इसे "पहले" के रूप में उपयोग करें, या एनएच चरित्र में इंडेक्स बनाएं।

दोनों वर्णन नीचे है:

हालांकि, विधि स्विफ्ट के संस्करणों के बीच मौलिक बदल गया है। बाद के संस्करणों के लिए नीचे पढ़ें ...

स्विफ्ट 1

let s: String = "Stack Overflow" 
let ss1: String = (s as NSString).substringToIndex(5) // "Stack" 
//let ss2: String = s.substringToIndex(5)// 5 is not a String.Index 
let index: String.Index = advance(s.startIndex, 5) 
let ss2:String = s.substringToIndex(index) // "Stack" 

सीएमडी क्लिक भ्रमित करने वाले NSString परिभाषा पर ले जाता है, तथापि String पर अध्यक्ष एवं प्रबंध निदेशक-क्लिक करें और आप निम्नलिखित मिलेगा substringToIndex पर:

extension String : Collection { 
    struct Index : BidirectionalIndex, Reflectable { 
     func successor() -> String.Index 
     func predecessor() -> String.Index 
     func getMirror() -> Mirror 
    } 
    var startIndex: String.Index { get } 
    var endIndex: String.Index { get } 
    subscript (i: String.Index) -> Character { get } 
    func generate() -> IndexingGenerator<String> 
} 

स्विफ्ट 2
commen के रूप में Tator @DanielGalasko बताते advance अब बदल गया है ...

let s: String = "Stack Overflow" 
let ss1: String = (s as NSString).substringToIndex(5) // "Stack" 
//let ss2: String = s.substringToIndex(5)// 5 is not a String.Index 
let index: String.Index = s.startIndex.advancedBy(5) // Swift 2 
let ss2:String = s.substringToIndex(index) // "Stack" 

स्विफ्ट 3
स्विफ्ट 3 में, इसे फिर से बदल गया है:

let s: String = "Stack Overflow" 
let ss1: String = (s as NSString).substring(to: 5) // "Stack" 
let index: String.Index = s.index(s.startIndex, offsetBy: 5) 
var ss2: String = s.substring(to: index) // "Stack" 

स्विफ्ट 4
स्विफ्ट 4 में, अभी तक एक और परिवर्तन:

let s: String = "Stack Overflow" 
let ss1: String = (s as NSString).substring(to: 5) // "Stack" 
let index: String.Index = s.index(s.startIndex, offsetBy: 5) 
var ss3: Substring = s[...index] // "Stack" 
var ss4: String = String(s[...index]) // "Stack" 
+1

क्या आप कृपया, कृपया सीमाओं को स्पष्ट रूप से प्रकार जोड़ने के साथ जवाब दे सकते हैं? धन्यवाद! – holex

+1

प्रकार जोड़े गए, और घोषणा। – Grimxn

+4

स्विफ्ट 2 अग्रिम में अब वैश्विक कार्य नहीं है लेकिन अब 'इंडेक्स' पर एक फ़ंक्शन है। 's.startIndex.advanceBy (5)' –

संबंधित मुद्दे