2015-09-23 13 views
10

Sadece Xcode7/IOS9'a geçiş yapıyorum ve kodumun bir kısmı uyumlu değil.IOS9 - '(' sayımı ')' (dize) 'türünde bir argüman listesiyle çaramadı'

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

olası yinelenen [ Swift 1.2 ve Swift 2.0'da dize uzunluğu] (http://stackoverflow.com/questions/29575140/string-length-in-swift-1-2-and-swift-2-0) – Moritz

+9

Swift 2: hex. characters.count' – Moritz

+0

Teşekkürler, çözümünüzü cevaplandırdığınız anda çözümünüz, API'nin github'unda da buldum. :) – f1rstsurf

cevap

21

:

Bu benim kodudur

"türünde bir argüman listesi '(String)' ile 'sayısı' çağırmak olamaz":

i Xcode aşağıdaki hatayı alıyorum

: swift2 onlar count

bu konuda bazı değişiklikler hızlı 1.2 kodudur yaptılar

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

swift2 çünkü kod bir dizi uzunluğunu bulmak mümkün için

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

olması gerekir.

Bu davranış esas String.CharacterView

aynı zamanda bir dizide yineleme şeklini değiştiren unutmayın yapar iken artık SequenceType protokole uyan hızlı 2,0 String çünkü olur

: Yani

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

Muhtemelen Xcode, bu gibi işlemler için size bir hata verecek olsa da, gerçekten dikkatli olun.

Yani bu kod (türünde bir argüman listesi '(String)' ile 'sayısı' çağırmak olamaz) sahip olduğu hatayı düzeltmek için nasıl görünmesi gerektiğini olmaktadır:

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 
    } 
İlgili konular