你好。
它仍然是一条小鱼,但我只是在考虑编程。
在这种情况下,我对MessageKit的理解加深了我对编程的理解。
我写了这篇文章。
关于用于创建投资组合(例如聊天应用程序)的MessageKit
文章解释。
我认为,如果您特别注意模具,视野会扩大。
MessageKit代码概述
聊天所需的信息是
发件人信息
?消息类型,信息
只要有了这两个,就可以在这两个地方就可以实现MessageKit。
什么是发件人信息?
?userId(唯一ID)
您可以注册为用户,
如果您不想注册,请使用终端的唯一ID(UDID)临时实现。 (实用)
?userName(显示在显示屏上)
什么是消息类型和信息?
?messageId(用于删除具有唯一ID的消息)
?messageType(文本,图片,视频等)
日期(聊天,排序也需要)
?messageContent(消息内容)
MessageKit可以实现有关这么多信息的信息。
发件人类型
这是发件人信息的协议。
协议遵循时描述此处描述的属性和功能。
如果您不编写它,将会很生气,这将有助于提高代码的可维护性。
1 2 3 4 5 6 7 8 9 10 | public protocol SenderType { /// The unique String identifier for the sender. /// /// Note: This value must be unique across all senders. var senderId: String { get } /// The display name of a sender. var displayName: String { get } } |
SenderType协议的内容如下所示。
将SenderType写为导入MessageKit,
命令放置光标
↓
跳转到定义
您可以通过跳至描述位置进行检查。
SenderType协议的内容为
描述了senderId和displayName。
我们将在此处实现符合此协议的Sender结构。
1 2 3 4 | struct Sender: SenderType { var senderId: String var displayName: String } |
现在,您已具有发送者信息的结构。
在聊天实施中,与发件人相关的过程为
我们将使用这种结构作为模具。
哦,如果要实现聊天,请编写此代码。
讯息类型
开头提到的另一个最低要求信息,即消息类型信息。
看看里面。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public protocol MessageType { /// The sender of the message. var sender: SenderType { get } /// The unique identifier for the message. var messageId: String { get } /// The date the message was sent. var sentDate: Date { get } /// The kind of message and its underlying kind. var kind: MessageKind { get } } |
发件人类型是SenderType类型。
较早实现的发件人是一种符合MessageType的结构。
通过将其分配给sender属性来使用它。
messageId已经说明,但是消息的ID。
用于删除单个消息。
sentDate是日期信息。
种类确定消息是文本,照片还是视频。
看看里面。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public enum MessageKind { /// A standard text message. /// /// - Note: The font used for this message will be the value of the /// `messageLabelFont` property in the `MessagesCollectionViewFlowLayout` object. /// /// Using `MessageKind.attributedText(NSAttributedString)` doesn't require you /// to set this property and results in higher performance. case text(String) /// A message with attributed text. case attributedText(NSAttributedString) /// A photo message. case photo(MediaItem) /// A video message. case video(MediaItem) /// A location message. case location(LocationItem) /// An emoji message. case emoji(String) //以下省略 |
您可以看到它被
枚举划分为大小写。
文字,attributeText,图片等。
这是符合MessageType的结构。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | struct Message: MessageType { var sender: SenderType var messageId: String var sentDate: Date var kind: MessageKind private init(kind: MessageKind, sender: Sender, messageId: String, date: Date) { self.kind = kind self.sender = sender self.messageId = messageId self.sentDate = date } init(attributedText: NSAttributedString, sender: Sender, messageId: String, date: Date) { self.init(kind: .attributedText(attributedText), sender: sender, messageId: messageId, date: date) } } |
至少可以这样实现。
有私有的init和没有私有的init。
这会将MessageKind从外部访问的初始化过程分开,
通过私有init初始化Message结构。
如果您还希望发送照片和视频,请此init不公开
我将添加该数字,但是由于假定它只是文本,所以我只准备了一个。
下次:ChatViewController
的实现
除非有特殊答复,否则我不会写下一篇文章。
不,对MessageKit的需求是什么?
装饰系统的描述?