【问题标题】:String does not conform to protocol "intervalType"字符串不符合协议“intervalType”
【发布时间】:2015-04-08 07:13:20
【问题描述】:

我收到了错误

类型'String'不符合协议'intervalType'

我只在游乐场文件中尝试过这段代码,但它也不起作用。

var header = [String:AnyObject]()

header["NachrichtenTyp"] = "2001"

switch header["NachrichtenTyp"] {
case "2001":
    println("2001 Import new file")

default:
    break 
}

我找到了这个帖子:Strings in Switch Statements: 'String' does not conform to protocol 'IntervalType'

但是这个例子也不适用于我的游乐场(Xcode 6.2)

【问题讨论】:

  • 如果你尝试 let myString: String = header["NachrichtenTyp"] 然后切换 myString 会发生什么?

标签: ios xcode swift


【解决方案1】:

如果您不想多次键入 as String 以防有很多不同的值,您可以嵌套两个 switch 语句,如下所示:

var header: [String:AnyObject] = [:]

header["NachrichtenTyp"] = "2001"

for key in header.keys {

  switch header[key] {

    case let str as String:
      switch str {
        case "2001":
          println("2001 Import new file")
        default:
          break
      }

    case let num as Int:
      // ...
      break

    default:
      break
  }

}

【讨论】:

    【解决方案2】:

    您可以通过以下方式解决此问题:

    case "2001" as String:
        println("2001 Import new file")
    

    【讨论】:

      【解决方案3】:

      修改如下:

      var header: [String:AnyObject] = [:]
      
      header["NachrichtenTyp"] = "2001" ;
      
      if let header = header["NachrichtenTyp"] as? NSString
      {
          switch header
          {
              case "2001":
              println("2001 Import new file")
              break
      
          default:
              break
          }
      }
      

      【讨论】:

        【解决方案4】:

        您也可以投射“NachrichtenTyp”。因此,您不需要将每个案例语句都“作为字符串”:

            var header: [String:String] = [:]
        
            header["NachrichtenTyp"] = "2001"
        
            let ntype:String = header["NachrichtenTyp"]! as String
        
            switch ntype {
            case "2001":
                println("2001 Import new file")
        
            default:
                break 
            }
        

        【讨论】:

        • 这仅适用于字符串,不适用于AnyObject
        • 确实如此。我以这种方式理解提问者提供的代码,即他的案例陈述意外使用 AnyObject 而不是 String。我的错:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多