2017-04-03 82 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' –