2014-09-05 67 views
0

有人想知道爲什麼這個代碼不能用Xcode 6 beta 7編譯嗎?它必須是一個非常愚蠢的錯誤,或編譯器的bug:使用下標(Swift)擴展數組。 Xcode 6 beta 7中的錯誤?

enum State : UInt8 { 
    case Off = 0 
    case On = 1 
} 

extension Array { 
    subscript (index: State) -> Element { 
     get { 
      let i = Int(index.toRaw()) 
      return self[i] 
     } 
     set { 
      let i = Int(index.toRaw()) 
      self[i] = newValue 
     } 
    } 
} 

class MyClass { 
    var results = [0, 7] 
    func getResult(#state: State) { 
     return results[state] // Error here: State not convertible to Int ???? 
    } 
} 

我已經使用字典試圖[狀態:INT]代替數組[INT],並copiler也給出了錯誤。謝謝!

回答

3

它看起來就像你在getResult函數忘記返回類型:

func getResult(#state: State) -> Int { 
+1

是啊......那麼「愚蠢的錯誤」選項勝。但Xcode似乎並沒有很好地評估正在發生的事情。編譯器應該知道沒有返回類型的函數不應該試圖返回任何東西,對吧?投擲「State not convertible to Int」在某種程度上會讓人誤解... – George 2014-09-05 14:59:41

+0

...幾乎是所有的編譯器錯誤信息 - 當它沒有意義時,通常這是一個簡單的缺失事件,或者關於optionals的不正確使用 – Antonio 2014-09-05 15:01:40

+0

There's相當多的混淆或相當通用的錯誤消息與Swift代碼相關。我希望在測試結束的時候能夠清理和改進這些功能。 – ColGraff 2014-09-05 15:02:28