Swift 4:'Message Kind'没有会员'url'

问题描述 投票:0回答:1

下面是MessageKit库的示例代码。目前,其行为是所有图像消息必须在显示给最终用户之前完全加载,因此需要花费大量时间等待。我想要的是在加载所有消息后加载图像。

看看1 /你会看到“kind”变量将是一个mediaItem看看2 /你会看到mediaItem有“url”变量看看3 /你会看到消息是用上面的mediaItem创建的

问题是如何获取消息的网址为3 /?我在下面试过但快速不明白

let imkind = message.kind
imkind.photo.url // error Enum element 'photo' cannot be referenced as an instance member

以下是1/2/3 /

1 /消息类型协议

public protocol MessageType {

/// The sender of the message.
var sender: Sender { 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 }

}

2 /创建一个图像以放入消息Kind如下:

 private struct ImageMediaItem: MediaItem {

var url: URL?
var image: UIImage?
var placeholderImage: UIImage
var size: CGSize

init(image: UIImage) {
    self.image = image
    self.size = CGSize(width: 240, height: 240)
    self.placeholderImage = UIImage()
}

}

3 /基于上面的MessageType创建消息:

internal struct MockMessage: MessageType {

var messageId: String
var sender: Sender
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(image: UIImage, sender: Sender, messageId: String, date: Date) {
    let mediaItem = ImageMediaItem(image: image)
    self.init(kind: .photo(mediaItem), sender: sender, messageId: messageId, date: date)
}



}

4 / podKind在pod库中

/// An enum representing the kind of message and its underlying kind.
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)

/// A custom message.
/// - Note: Using this case requires that you implement the following methods and handle this case:
///   - MessagesDataSource: customCell(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> UICollectionViewCell
///   - MessagesLayoutDelegate: customCellSizeCalculator(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> CellSizeCalculator
case custom(Any?)



}
ios swift
1个回答
1
投票
guard case .photo(let mediaItem) = imkind else {
        return
    }

    print(mediaItem.url)

您必须使用此代码解包枚举案例。问题是您尝试将enum检索为mediaItem。但是你必须检索内部数据。

© www.soinside.com 2019 - 2024. All rights reserved.