IOS9 - не может вызывать "count" с списком аргументов типа "(String)"

Я просто перехожу к Xcode7/IOS9, и некоторая часть моего кода несовместима.

Я получаю следующую ошибку от Xcode:

"не может вызывать 'count' со списком аргументов типа '(String)'"

Это мой код:

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

В swift2 они внесли некоторые изменения на 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

Чтобы найти длину массива.

Это происходит, главным образом, в swift 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 {
    }
}

Так что будьте очень осторожны, хотя, скорее всего, Xcode даст вам ошибку для таких операций, как этот.

Итак, вот как должен выглядеть ваш код, чтобы исправить эту ошибку (не можете вызывать "count" с помощью списка аргументов типа "(String)" ):

  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
    }