2015-09-23 78 views
10

我只是迁移到Xcode7/IOS9并且我的代码的某些部分不兼容。IOS9 - 无法用类型为'(String)'的参数列表调用'count'

我碰到下面的错误在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

可能重复[在Swift 1.2和Swift 2.0中的字符串长度](http://stackoverflow.com/questions/29575140/string-length-in-swift-1-2-and-swift-2-0) – Moritz

+9

在Swift 2中:'十六进制。 characters.count' – Moritz

+0

谢谢,您的解决方案工作,在您发布答案的那一刻,我在API的github上也找到了答案。 :) – f1rstsurf

回答

21

在swift2中,他们做了一些更改count

这是swift 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 

为了能够找到的阵列的长度。

这种现象主要发生在SWIFT 2.0,因为StringString.CharacterView确实

请记住,它也改变了你在一个阵列迭代的方式不再符合SequenceType协议:

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

所以要非常小心,尽管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 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 
    } 
相关问题