2015-04-08 56 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