2015-09-23 9 views
10

私はXcode7/IOS9に移行し、私のコードの一部は互換性がありません。IOS9 - タイプ '(文字列)'の引数リストで '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では 'hex。 characters.count' – Moritz

+0

ありがとうございます、あなたのソリューションの仕事は、あなたが答えを投稿する瞬間、私はAPIのgithubにも見つかりました。 :) – f1rstsurf

答えて

21

:swift2では、彼らは、これはSWIFT 1.2のコードである count

にいくつかの変更を行いました

let test1 = "ajklsdlka"//random string 
let length = count(test1)//character counting 

swift2コードは、配列の長さを見つけることができるようにするために

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

でなければならないからです。

String.CharacterView

それはまた、あなたが配列で反復処理する方法を変更したことを覚えておいてくださいんがStringは、もはやSequenceTypeプロトコルに準拠しているため、この動作は、主に2.0迅速に起こりません:

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 
    } 
関連する問題