2015-04-08 58 views
0

我得到了错误字符串不符合协议“intervalType”

类型“串”不符合协议“intervalType”

我只在playgroundfile和它试图验证码也不起作用。

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)

+0

如果您尝试让myString:String = header [“NachrichtenTyp”]然后切换myString,会发生什么? – Volker

回答

3

如果你不想在很多不同的值的情况下键入as String很多次,你可以窝2项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 
    } 

} 
3

你可以解决这个问题:

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

这么简单....谢谢 –

2

修改像这样:

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 
    } 
} 
2

你也可以施放你的“NachrichtenTyp”。所以,你不需要“成串”每个case语句:

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 
    } 
+0

这只适用于字符串而不适用于'AnyObject'。 – Kirsteins

+0

确实。我理解了提问者提出的关于他的case-statement的代码,意外地使用AnyObject而不是String。我的错 :) – itinance