2015-09-23 16 views
10

की एक तर्क सूची के साथ 'गिनती' का आह्वान नहीं कर सकता है, मैं बस Xcode7/IOS9 पर माइग्रेट करता हूं और मेरे कोड का कुछ हिस्सा संगत नहीं है।आईओएस 9 - प्रकार '(स्ट्रिंग)'

मैं Xcode से निम्न त्रुटि मिलती है:

let index = rgba.startIndex.advancedBy(1) 
    let hex  = rgba.substringFromIndex(index) 
    let scanner = NSScanner(string: hex) 
    var hexValue: CUnsignedLongLong = 0 

    if scanner.scanHexLongLong(&hexValue) 
    { 
    if count(hex) == 6 
    { 
     red = CGFloat((hexValue & 0xFF0000) >> 16)/255.0 
     green = CGFloat((hexValue & 0x00FF00) >> 8)/255.0 
     blue = CGFloat(hexValue & 0x0000FF)/255.0 
    } 
    else if count(hex) == 8 
    { 
     red = CGFloat((hexValue & 0xFF000000) >> 24)/255.0 
     green = CGFloat((hexValue & 0x00FF0000) >> 16)/255.0 
     blue = CGFloat((hexValue & 0x0000FF00) >> 8)/255.0 
     alpha = CGFloat(hexValue & 0x000000FF)  /255.0 
    } 
+1

के संभावित डुप्लिकेट [ स्विफ्ट 1.2 और स्विफ्ट 2.0 में स्ट्रिंग लम्बाई] (http://stackoverflow.com/questions/29575140/string-length-in-swift-1-2-and-swift-2-0) – Moritz

+9

स्विफ्ट 2: 'हेक्स में। characters.count' – Moritz

+0

धन्यवाद, आपका समाधान कार्य, जिस समय आप उत्तर पोस्ट करते हैं, मुझे एपीआई के जिथब पर भी मिला। :) – f1rstsurf

उत्तर

21

:

" '(स्ट्रिंग)' प्रकार का एक तर्क सूची के साथ 'गिनती' आह्वान नहीं कर सकते"

यह मेरा कोड है स्विफ्ट 2 में उन्होंने count

पर कुछ बदलाव किए हैं यह स्विफ्ट 1.2:

के लिए कोड है
let test1 = "ajklsdlka"//random string 
let length = count(test1)//character counting 

swift2 के बाद से कोड

let test1 = "ajklsdlka"//random string 
let length = test1.characters.count//character counting 

होने के लिए एक सरणी की लंबाई को खोजने के लिए सक्षम होने के लिए करना होगा।

यह व्यवहार मुख्य रूप से तेजी से 2.0 क्योंकि String नहीं रह गया है SequenceType प्रोटोकॉल के अनुरूप String.CharacterView करता है, जबकि

ध्यान रखें कि यह भी जिस तरह से आप एक सरणी में पुनरावृत्ति कर रहे हैं बदल में क्या होता है:

var password = "Meet me in St. Louis" 
for character in password.characters { 
    if character == "e" { 
     print("found an e!") 
    } else { 
    } 
} 

तो वास्तव में सावधान रहें हालांकि अधिकतर संभावना है कि एक्सकोड आपको इन तरह के संचालन के लिए एक त्रुटि दे रहा है।

तो यह आपके कोड के क्रम कि त्रुटि आप कर रहे हैं (प्रकार का एक तर्क सूची '(स्ट्रिंग)' 'के साथ गिनती' आह्वान नहीं कर सकता) को ठीक करने में दिखना चाहिए कि कैसे:

let index = rgba.startIndex.advancedBy(1) 
    let hex  = rgba.substringFromIndex(index) 
    let scanner = NSScanner(string: hex) 
    var hexValue: CUnsignedLongLong = 0 

    if scanner.scanHexLongLong(&hexValue) 
    { 
    if hex.characters.count == 6 //notice the change here 
    { 
     red = CGFloat((hexValue & 0xFF0000) >> 16)/255.0 
     green = CGFloat((hexValue & 0x00FF00) >> 8)/255.0 
     blue = CGFloat(hexValue & 0x0000FF)/255.0 
    } 
    else if hex.characters.count == 8 //and here 
    { 
     red = CGFloat((hexValue & 0xFF000000) >> 24)/255.0 
     green = CGFloat((hexValue & 0x00FF0000) >> 16)/255.0 
     blue = CGFloat((hexValue & 0x0000FF00) >> 8)/255.0 
     alpha = CGFloat(hexValue & 0x000000FF)  /255.0 
    }