JMSGAbstractContent.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * | | | | \ \ / / | | | | / _______|
  3. * | |____| | \ \/ / | |____| | / /
  4. * | |____| | \ / | |____| | | | _____
  5. * | | | | / \ | | | | | | |____ |
  6. * | | | | / /\ \ | | | | \ \______| |
  7. * | | | | /_/ \_\ | | | | \_________|
  8. *
  9. * Copyright (c) 2011 ~ 2015 Shenzhen HXHG. All rights reserved.
  10. */
  11. #import <Foundation/Foundation.h>
  12. #import <JMessage/JMSGConversation.h>
  13. /*!
  14. * 消息内容(抽象类)
  15. *
  16. * 所有消息内容的实体类,都直接或者间接继承这个类。很多 API 上使用这个抽象类作为类型。
  17. *
  18. * 有时候通过 API 得到的是这个抽象类型,需要基于消息的 contentType 属性来转型为相应的具体子类,
  19. * 做进一步的动作。
  20. *
  21. * ```
  22. * // 转移到子类举例
  23. * JMSGAbstractContent *content = oneMessage.content;
  24. * if (oneMessage.contentType == kJMSGContentTypeText) {
  25. * JMSGTextContent *textContent = (JMSGTextContent *)content;
  26. * String text = textContent.text;
  27. * }
  28. * ```
  29. */
  30. @interface JMSGAbstractContent : NSObject <NSCopying> {}
  31. JMSG_ASSUME_NONNULL_BEGIN
  32. /*!
  33. * @abstract 附加参数
  34. *
  35. * @discussion 对某个类型的消息, 比如 VoiceContent, 可以附加参数以便用于业务逻辑
  36. */
  37. @property(nonatomic, strong, readonly) NSDictionary * JMSG_NULLABLE extras;
  38. // 无效的初始化方法. 应使用各具体子类内容类型的特别的方法
  39. - (nullable instancetype)init NS_UNAVAILABLE;
  40. /*!
  41. * @abstract 增加一个字符串值类型的字段
  42. *
  43. * @param value 新增键值对的值. String 类型.
  44. * @param key 新增键值对的键
  45. */
  46. - (BOOL)addStringExtra:(NSString *)value forKey:(NSString *)key;
  47. /*!
  48. * @abstract 增加一个数字值类型的字段
  49. *
  50. * @param value 新增键值对的值. Number 类型.
  51. * @param key 新增键值对的键
  52. */
  53. - (BOOL)addNumberExtra:(NSNumber *)value forKey:(NSString *)key;
  54. /*!
  55. * @abstract 调用此方法得到 JSON 格式描述的 Message Content
  56. */
  57. - (NSString *)toJsonString;
  58. /*!
  59. * @abstract 判断消息内容是否相等
  60. *
  61. * @param content 比较的内容对象
  62. *
  63. * @discussion 对于媒体类的内容, 即使同样的内容, 每次也视为新的资源, 会生成不同的资源ID,
  64. * 从而最终 content 不相等.
  65. *
  66. * 所有的子类都提供本方法.
  67. */
  68. - (BOOL)isEqualToContent:(JMSGAbstractContent * JMSG_NULLABLE)content;
  69. JMSG_ASSUME_NONNULL_END
  70. @end