枚举 Int 转换为 NSNumber - 无法将类型的值转换为预期的参数类型

Enum Int cast to NSNumber - Cannot convert value of type to expected argument type

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 个变量,我希望它的初始值为 NSNumber

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

但是我这里出错了Cannot convert value of type 'ImageType' to expected argument type 'Int32'

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

问题

您正在使用 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)