Swift4:“MessageKind”没有成员“url”

2024-04-04

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

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

问题是如何获取3/处消息的url?我在下面尝试过,但斯威夫特不明白

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/ 创建一个图像放入消息中,如下所示:

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/ pod库中的messageKind

/// 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?)

}

guard case .photo(let mediaItem) = imkind else {
        return
    }

    print(mediaItem.url)

您必须使用此代码解开枚举大小写。问题是您尝试将枚举检索为 mediaItem。但你必须检索内部数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift4:“MessageKind”没有成员“url” 的相关文章

  • 带有自定义 init 的 SwiftUI 视图

    假设我正在制作一个如下所示的自定义输入元素 struct CustomInput View Binding var text String var name String var body some View TextField name
  • 如何在 UITextView 中禁用放大功能

    我想摆脱 UITextView 中的放大和文本选择 但我需要电话号码 链接和地址检测器 我在用 void addGestureRecognizer UIGestureRecognizer gestureRecognizer if gestu
  • Draggable Boxview 不更新 Xamarin

    我的第一个问题是框视图生成在左上角 而不是我指定的设计网格第 10 行和网格第 3 列 第二个问题在于可拖动视图 在代码本地可拖动视图的第一部分中 它正确地调用了触摸事件 但也许它没有在GUI中更新
  • Swift 中的 @autoreleasepool 相当于什么?

    在 Swift 中 我注意到没有 autoreleasepool 构造 尽管 Swift 确实使用了 ARC 在 Swift 中管理自动释放池的正确方法是什么 或者它是否因某种原因被删除 语法如下 autoreleasepool code
  • Swift 1.2 可选外部变量?

    由于 Swift 无法访问编译变量 因此我创建了一个指向编译变量的 Objective C extern 变量 编译变量转换器 h extern NSString const NetworkApiBasicAuthUsername 编译变量
  • iOS - 在 UITabBar 上方获取所需的阴影

    我试图让我的标签栏阴影看起来像这张图片中看到的那样 这样做的最佳方法是什么 我正在使用 Objective C Thanks 您可以使用以下代码为任何 UI 对象提供阴影 tabBar layer shadowOffset CGSize w
  • 致命错误:在 flutter 中找不到“Flutter/Flutter.h”文件

    这是错误 在文件中包含来自 Users chetan pub cache hosted pub dartlang org webview flutter 1 0 7 ios Classes JavaScriptChannelHandler
  • 如何在 iOS 上更改设备音量 - 而不是音乐音量

    我想更改 iOS iPhone 上的设备音量 我知道我可以使用以下几行更改音乐库的音量 implement at first MediaPlayer framework MPMusicPlayerController musicPlayer
  • 如何使用呼叫目录扩展来识别应用程序中的来电?

    我正在研究callKit框架 我发现通过使用呼叫目录扩展 我们可以识别来电电话号码 我的问题是如何在 iOS 应用程序中实现呼叫目录扩展来识别来电详细信息 我在 Objective C 工作 让一个数 919876xxxxx 使用此方法添加
  • 在两个可移动 uiview 之间画线

    我有一个带有节点的 滚动视图 UIViews 可以拖动 我正在尝试在选定的之间绘制边缘UIViews使用 calayer 但我不知道当视图位置发生变化时如何重新绘制线条 In my viewControllerI 类在节点数组中添加第一个和
  • UINavigationBar 滑开而不是留在原处

    我创建了演示项目来展示问题 我们在 UINavigationController 中有两个视图控制器 MainViewController这是根 class MainViewController UIViewController lazy
  • 重新组织链式可观察量

    我有一大块链接的 Rx 可观察量 当通过选择表视图行时会触发这些可观察量table rx modelSelected 我希望能够打破这个逻辑 因为我目前必须在flatMapLatest 因为这是流程的 第一步 感觉不对 我必须在后续执行更多
  • 如何将 SCNPlane 颜色更改为透明颜色

    我正在开发一个 ARKit 项目 在水平面上点击时需要波纹动画效果 为此 我采用了 UIView 对象并将其作为 SCNPlane 对象材料的内容传递 我已将波纹动画添加到 UIView 对象 一切正常 但我无法将 SCNPlane 颜色更
  • 视频中的图像/文本叠加 swift

    我正在使用 swift 在视频中使用图像叠加来实现水印效果 我正在使用AVFoundation为此 但不知何故我没有成功 以下是我的覆盖图像 文本的代码 let path NSBundle mainBundle pathForResourc
  • 带有图像的 UITableView 滚动非常慢[重复]

    这个问题在这里已经有答案了 可能的重复 带图像的表格视图 加载和滚动缓慢 https stackoverflow com questions 4071497 table view with images slow load and scro
  • UIImageWriteToSavedPhotosAlbum 选择器语法问题

    努力让 UIImageWriteToSavedPhotosAlbum 快速工作https developer apple com library ios documentation UIKit Reference UIKitFunction
  • 旋转 GPUImageTiltShiftFilter - GPUImage

    我想要一个非水平 GPUImageTiltShiftFilter 旋转 我想将其旋转到任意旋转角度 我还希望过滤器速度快 可以通过带有 UIRotationGestureRecongizer 的 UI 进行旋转 我该怎么做呢 啊 想通了 不
  • 如何在 iOS 6 中强制 UIViewController 为纵向

    As the ShouldAutorotateToInterfaceOrientation在 iOS 6 中已弃用 我用它来强制特定视图仅肖像 在 iOS 6 中执行此操作的正确方法是什么 这仅适用于我的应用程序的一个区域 所有其他视图都可
  • iOS 开发:如何强制 UIWebView 加载 Facebook 的非移动版本?

    我正在深入研究 iOS 开发 当我尝试在 UIWebView 中加载特定的 Facebook 粉丝页面时 它会加载该网站的移动版本 该版本仅加载粉丝页面的墙 而不是我需要加载的特定选项卡 在我的应用程序的 iPad 版本中 UIWebVie
  • GCD 与自定义队列

    我想知道这两者的性能有什么区别 dispatch async dispatch get global queue DISPATCH QUEUE PRIORITY HIGH 0 perform complex operation dispat

随机推荐

  • ASP.NET MVC 3 使用身份验证

    如何使用 FormsAuthentication 保存某些内容 我不想通过 URL 存储用户 ID 例如 现在我有这样的代码 UserController class HttpPost public ActionResult LogOn L
  • 如何使用 PHP 打破外循环?

    我正在寻找打破 PHP 中的外部 for foreach 循环 这可以在 ActionScript 中完成 如下所示 top for each var i MovieClip in movieClipArray for each var j
  • 使用反应钩子 getSnapshotBeforeUpdate

    如何使用 React hooks 实现 getSnapshotBeforeUpdate 提供的相同逻辑 根据React Hook 常见问题解答 https reactjs org docs hooks faq html do hooks c
  • 为什么 python docker 镜像这么大(~750 MB)?

    My Dockerfile FROM python 3 onbuild CMD python test py test py print hello world 构建图像 docker build t my test app docker
  • 如何渲染模板和布局?

    在控制器方法中 如何渲染模板和布局 Like so def new render template gt devise invitations new layout gt application unauthorized2 t2 end r
  • VS2010中关闭双击取消停靠

    我总是不小心双击 VS2010 中的选项卡并取消停靠它们 是否可以关闭此行为 注意 我正在使用 Productivity Power Tools 中的 Document Well 2010 Plus 以防产生影响 在文档选项卡上找到它以及高
  • 重命名实体框架 T4 模板生成的类名称?

    我有一个包含大量表的数据库 不幸的是这些表的命名没有任何标准约定 表名 另一个表名 还有另一个表名 垃圾表 我使用实体框架和标准 T4 代码生成模板在 C 中创建 POCO 类 是否有我可以遵循的最佳实践 让我可以合并自己的约定 在 C 应
  • Excel - VLOOKUP 与 INDEX/MATCH - 哪个更好?

    我了解如何使用每种方法 VLOOKUP or HLOOKUP vs INDEX MATCH 我寻找它们之间的差异不是出于个人喜好 而是主要在以下方面 是否有一种方法可以做到而另一种方法不能做到的事情 一般来说 哪一种更有效 或者取决于具体情
  • 如何导入具有正确类型的 Vue 类组件?

    例如 如果我有一个单文件 Vue 类组件 MyComponent vue
  • 在 jQuery .serialize() 中包含空值字段

    我正在尝试通过 jQuery post 提交表单并通过序列化表单数据 form serialize 不幸的是未选中的字段单选按钮 or 复选框没有被序列化 因此已提交 有没有办法包含所有字段 无论它们是否包含值 我想这只会影响这样的字段
  • 使用seaborn和pandas绘图防止重叠条

    我正在尝试使用 pandas 绘图来创建带有 seaborn 导入的堆叠水平条形图 我想删除条之间的空间 但也不让条重叠 这是我尝试过的 import pandas as pd import numpy as pd import seabo
  • HDF5 - 并发、压缩和 I/O 性能 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我对 HDF5 性能和并发性有以下疑问 HDF5 支持并发写访问吗 撇开并发因素不谈 HDF5 的性能如何 输入 输出性能 does 压缩率影响性能
  • 适用于 IOS/Android 应用程序的谷歌云存储下载

    有没有一种方法可以将单个大文件作为多线程下载 并在从谷歌云存储下载后合并所有文件 是的 从 Google Cloud 存储下载对象时 您可以指定要检索的字节范围 使用 XML API 这将通过 Range 标头进行处理 这对于恢复中断的下载
  • 正则表达式如何验证字母之间的下划线

    我如何允许任何单词字符和下划线之间应该有一个字母和一个数字 示例 ab2 sb s s 但它不应该允许 sdc 或 s2 这是我的代码 a zA Z0 9 6 255 我在 javascript 上使用正则表达式 您需要将字符长度检查与模式
  • MVC 的替代方案 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 模型视图控制器的替代 设计方法 有哪些 MVC 似乎很流行 SO 是用它构建的 我知道很多 但它是唯一使用的方法吗 关于几种不同的交互
  • 错误:mysqlnd 无法使用旧的不安全身份验证连接到 MySQL 4.1+

    我收到以下错误 数据库连接失败 mysqlnd 无法使用旧的不安全身份验证连接到 MySQL 4 1 请使用管理工具通过以下命令重置您的密码SET PASSWORD PASSWORD your existing password 这将存储一
  • C# 项目在 Visual Studio 中重建的原因

    我有一个包含约 320 个项目的大型解决方案 即使对单个 Web 表单进行很小的更改 也会导致测试 调试小更改所需的构建时间很长 我怀疑构建后文件复制任务会 触及 文件日期时间并导致多次重建 在没有任何强大的命名和版本控制影响的情况下 除了
  • 如何定义输出类型取决于输入类型的函数

    给定以下课程 case class AddRequest x Int y Int case class AddResponse sum Int case class ToUppercaseRequest str String case cl
  • 在 x86-64 asm 中:如果源操作数是两个立即值,是否有办法优化两个相邻的 32 位存储/写入内存?

    有没有一个好的方法来优化这段代码 x86 64 mov dword ptr rsp 0 mov dword ptr rsp 4 0 其中立即值可以是任何值 不一定为零 但在这种情况下始终是立即常量 原双店还慢吗 硬件中的写组合和 op 的并
  • Swift4:“MessageKind”没有成员“url”

    下面是 MessageKit 库的示例代码 目前 其行为是所有图像消息必须在显示给最终用户之前完全加载 因此需要花费大量时间等待 我想要的是在加载所有消息后加载图像 看 1 你会看到 kind 变量将是一个 mediaItem 看2 你会看