0

我想用swift定义一个也可以在objective-c中使用的函数。我有一个枚举:

    @objc public enum BookType: Int {
      case novel
      case magazine
    
      func name() -> String {
          switch self {
          case .novel:
              return "novel"
          case .magazine:
              return "magazine"
          }
      }
  }

功能是:

@objc public func uploadBookImages(images: [BookType: UIImage]) {
       // code here
}

这个函数会给我带来一个编译错误说:

方法不能被标记为@objc,因为参数的类型不能在 Objective-C 中表示

这可能是因为objective-c 不接受swift 字典,因为它是一个结构。我正在考虑使用 NSDictionary 而不是 swift 字典。但是,如何使用 NSDictionary 将参数数据类型指定为 [BookType: UIImage]?我想在调用时将 NSDictionary<BookType: UIImage> 传递给该函数。

4

1 回答 1

0

您需要使用 NSDictionary 而不是 swift Dictionary

  func uploadBookImages(images: NSDictionary) {
    // code here
    print(images)
}

用法:

   let dictParams:Dictionary<BookType, Int> = [
        BookType.magazine : 1,
        BookType.novel : 2,
        ];
    
    uploadBookImages(images: dictParams as NSDictionary)
于 2022-02-28T05:52:07.027 回答