2017-04-03 86 views
0

我已經創建了一個響應枚舉爲我的網絡返回值和一個函數,它應該返回AnyObject,因爲它必須是一個鍵的值。枚舉關聯值的問題

enum Response { 

    case Success(value:AnyObject) 
    case Failure(errorNumber: Int) 

    func getResponse() -> AnyObject{ 
     switch self { 
     case .Success(value: AnyObject): 
      return value 
     case .Failure(errorNumber: Int): 
      return errorNumber 
     } 
    } 

} 

生成以下錯誤: enter image description here 我沒加實際文本的錯誤,因爲我想告訴你,它甚至不會做語法高亮errorNumber和價值

最終在我的代碼我會分配該值到AnyObject後來那anyobject將downcasted到[NSObject : AnyObject]

因此,我將有:

var data : AnyObject? // <-- from our internal framework 
data = Response.Success(data) 
var params = data as! [NSObject : AnyObject] // <-- from our internal framework 

第一個代碼片段是我的新代碼,但內部框架是我無法更改的代碼行。

FYI我們的代碼仍然在使用Swift2 :(

+4

你的語法是錯誤的,它應該是'情況.Success(讓值) :' –

+4

消除getResponse()函數,將枚舉看作是一個數據值或一個錯誤,將它們重新組合成Any/AnyObject類型的單個返回值,拋出信息並導致後續的類型轉換。 –

+2

僅僅因爲你稍後使用'AnyObject',並不意味着'Response'應該處理它 - 我會推薦nd使它成爲通用的,例如'Response ',其中'成功(值:T)'(正如Price所說,你不應該將這些情況結合在一起 - 如果'Int'是一個有效的成功值? )。 – Hamish

回答

1

我建議你給Swift Book讀:

func getResponse() -> Any { 
    switch self { 
    case .Success(let value): 
     return value 
    case .Failure(let errorNumber): 
     return errorNumber 
    } 
} 
+0

謝謝,我已經*閱讀*書和其他東西。這是當你應用他們時出現的這些問題:D。我使用的是Swift2,這並不意味着「任何」超出了範圍。 – Honey

+1

@Honey如果你仍然使用Swift 2,你應該使用'AnyObject',否則使用'Any' –