Enum Int强制转换为NSNumber - 无法将类型的值转换为预期的参数类型

时间:2016-04-15 16:11:43

标签: swift enums swift2 nsnumber swift2.2

public enum ImageType: Int
{
  case Png
  case Jpg
  case Psd

  public init(rawValue: Int)
  {
    switch rawValue {
    case 0:
      self = .Png
    case 1:
      self = .Jpg
    default:
      self = .Psd
    }
  }
}

我有一个public var,我希望它的初始值为NSNumber

public var imageType: NSNumber? = NSNumber(int: ImageType.Psd)

但我在这里遇到错误Cannot convert value of type 'ImageType' to expected argument type 'Int32'

这很奇怪,因为我也使用int作为我的枚举。

1 个答案:

答案 0 :(得分:3)

问题

您正在使用此NSNumber

的初始值设定项
public init(int value: Int32)

正如您所见,它确实收到了Int32。但是你传递的是ImageType,所以编译器不满意并且它正好告诉你

Cannot convert value of type 'ImageType' to expected argument type 'Int32'

解决方案

public var imageType: NSNumber? = NSNumber(integer: ImageType.Psd.rawValue)