IOS9 - 无法使用类型为“(字符串)”的参数列表调用“计数”

Posted

技术标签:

【中文标题】IOS9 - 无法使用类型为“(字符串)”的参数列表调用“计数”【英文标题】:IOS9 - cannot invoke 'count' with an argument list of type '(String)' 【发布时间】:2015-09-23 13:43:37 【问题描述】:

我刚迁移到 Xcode7/ios9,部分代码不兼容。

我从 Xcode 收到以下错误:

" 不能使用 '(String)' 类型的参数列表调用 'count' "

这是我的代码:

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
    

【问题讨论】:

String length in Swift 1.2 and Swift 2.0的可能重复 在 Swift 2 中:hex.characters.count 谢谢,您的解决方案有效,在您发布答案的那一刻,我也在 API 的 github 上找到了。 :) 【参考方案1】:

在 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 中,因为 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 很可能会给你这样的操作错误。

所以这就是你的代码应该如何修复你遇到的错误(不能使用类型为'(String)'的参数列表调用'count'):

  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
    

【讨论】:

以上是关于IOS9 - 无法使用类型为“(字符串)”的参数列表调用“计数”的主要内容,如果未能解决你的问题,请参考以下文章

无法使用类型为“(NSFetchRequest<NSFetchRequestResult>)”的参数列表调用“获取”

无法使用参数列表调用类型“附加”

无法使用类型为“(字符串)”的参数列表调用“执行选择器”

无法使用类型为“(字符串,withIntermediateDirectories:B)的参数列表调用“createDirectoryAtPath”

SWIFT 4.1 无法使用类型为“(字符串?)”的参数列表调用类型“Double”的初始化程序

无法使用类型为“(字符串)”的参数列表调用 <method>