无法使用变异成员...因为追加?

2024-04-22

我很困惑为什么会收到此错误(swift 4.2.1)。

// next, select only entries in range
let filteredDataOpt: [TimeSeriesEntry?] = filteredApps
    .map { data in
        let isInDate = dates.contains { date in
            guard let d = date else {
                return false
            }
            return Calendar.current.isDate(d, equalTo: data.date, toGranularity: Calendar.Component.day)
        }
        return isInDate ? timeSeriesDataFromAppData(data) : nil
    }.append(contentsOf: locationsData.map { data in
        let isInDate = dates.contains { date in
            guard let d = date else {
                return false
            }
            return Calendar.current.isDate(d, equalTo: data.date, toGranularity: Calendar.Component.day)
        }
        return isInDate ? timeSeriesDataFromLocationData(data) : nil
    })

这会产生

无法对不可变值使用变异成员:函数调用返回不可变值

在第三行。

但这并没有:

// next, select only entries in range
let filteredDataOpt: [AppData?] = filteredByApps
    .map { data in
        let isInDate = dates.contains { date in
            guard let d = date else {
                return false
            }
            return Calendar.current.isDate(d, equalTo: data.date, toGranularity: Calendar.Component.day)
        }
        return isInDate ? data : nil
}
let filteredData: [AppData] = filteredDataOpt.compactMap { $0 }

我的困惑源于这样一个事实:我正在操作一个序列append而不是先将其分配给常量,然后append正在学习它。为什么我的序列是只读的?

edit:显然 map 总是(至少乍一看,很奇怪)返回一个常量。总的来说,我的解决方案就是:

var filteredDataOpt: [TimeSeriesEntry?] = filteredApps
    .map { data in
        let isInDate = dates.contains { date in
            guard let d = date else {
                return false
            }
            return Calendar.current.isDate(d, equalTo: data.date, toGranularity: Calendar.Component.day)
        }
        return isInDate ? self.timeSeriesData(appData: data) : nil
}
filteredDataOpt.append(contentsOf: self.locationsData.map { data in
    let isInDate = dates.contains { date in
        guard let d = date else {
            return false
        }
        return Calendar.current.isDate(d, equalTo: data.date, toGranularity: Calendar.Component.day)
    }
    return isInDate ? self.timeSeriesData(locationData: data) : nil
})
let filteredData = filteredDataOpt.compactMap { $0 }

但是,还有人觉得这不令人满意吗?我被困住了:

  • 中间变量
  • 我需要的只是一个常量的变量

您的问题可以简化为以下内容:

let data = [1, 2, 3]
let data2 = [4, 5, 6]

let filteredData: [Int] = data
    .map { $0 }
    .append(contentsOf: data2.map { $0 })

解决方案是使用串联而不是append:

let data = [1, 2, 3]
let data2 = [4, 5, 6]

let filteredData: [Int] = data
    .map { $0 }
    + data2.map { $0 }

作为解释,这类似于:

let a: Int = 0
let b = a += 1 // this is append
let c = (a + 1) += 1 // this is append with a temporary expression

(您将添加到立即丢弃的内容中,并且该值不会存储到c).

显然应该这样做

let a: Int = 0
let b = a + 1

请注意,即使您可以append关于临时返回值,append没有返回值并且您的结果分配给filteredDataOpt将会Void.

临时表达式之所以是常量(不可变)的原因是为了防止您犯类似的错误。

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

无法使用变异成员...因为追加? 的相关文章

  • 如何组合两个 SwiftyJSON 对象

    我有一个 swiftyJSON 对象 例如 location http img http commentCount 0 timestamp 1432460217550 我希望能够向其附加另一个 swiftyJSON 对象 使其看起来像 lo
  • iOS Swift 在后台下载大量小文件

    在我的应用程序中 我需要下载具有以下要求的文件 下载大量 例如 3000 个 小 PNG 文件 例如 5KB 逐个 如果应用程序在后台继续下载 如果图像下载失败 通常是因为互联网连接丢失 请等待 X 秒然后重试 如果失败Y次 则认为下载失败
  • WKWebview 中的 iCLoud 文档选择器关闭容器视图

    我有一个 WKWebview 加载基于 Web 的 UI 我希望用户能够从其 iCloud 文档上传文件 我已授予正确的权限 并且可以浏览 iCloud 文档 但是 当我选择文件或单击取消按钮时 文档选择器视图也会关闭 WKWebview
  • 如何将自定义 C 代码放入 SwiftPM 包中?

    我正在尝试将 C 代码打包到 Swift 模块中 我们称之为CModule 一旦我将其放入项目的基本文件夹中 Swift模块 并配置了搜索路径 我可以在 Swift 文件中自动完成工作 并检测错误 警告 问题是 导入时它无法识别该模块 并且
  • 如何观察UserDefaults的变化?

    我有一个 ObservedObject在我看来 struct HomeView View ObservedObject var station Station var body some View Text self station sta
  • 删除派生数据文件夹后,Xcode 不断重新创建派生数据文件夹

    自动完成功能在 Xcode 6 中不再起作用 我四处搜索 发现删除派生数据文件夹可以解决此问题 每次我删除它时 它都会回来 然后就不会再自动完成了 有什么建议么 Thanks 没关系 我解决了这个问题 我没有声明需要在类内的方法中使用的变量
  • 如何向 UIView 添加大小调整手柄?

    我试图根据用户请求在运行时动态创建视图 UIImageView 和 UITextView 然后允许用户移动它们并调整它们的大小 除了调整大小之外 我的一切都工作得很好 我尝试使用捏合手势识别器 但发现它对于我想要的东西来说太笨拙了 因此 我
  • Swift 3 中的 JSON 解析

    有没有人能够找到一种在 Swift 3 中解析 JSON 文件的方法 我已经能够返回数据 但在将数据分解为特定字段时我没有成功 我会发布示例代码 但我已经尝试了很多不同的方法但没有成功 并且没有保存任何代码 我想要解析的基本格式是这样的 提
  • 调用 SwiftUI 中位置 #11、#12 处的额外参数 [重复]

    这个问题在这里已经有答案了 我在 SwiftUI 中的切换开关上不断收到 调用中位置 11 12 处有额外参数 错误 我见过其他人有 调用中的额外参数 错误 但答案似乎没有帮助 另外 我的错误是 位置 11 12 我还没有看到其他人发生这种
  • 对成员“buildBlock()”的引用不明确

    我一直在尝试使用 Swift UI 为 iOS 13 制作一个应用程序 但我不断收到这个奇怪的错误 对成员 buildBlock 的引用不明确 无论我做什么 错误都不会消失 我尝试一次对代码段进行注释 以查看哪一部分可能导致了问题 但唯一有
  • Xcode 10 Beta 5 — clang:错误:链接器命令失败,退出代码为 1

    有人可以帮我吗 我的项目一切正常 但更新到 Xcode10 Beta5 后 尝试在 iPhone 上运行该应用程序时出现此错误 然而模拟器可以工作 请帮助我 我已经对这个问题进行了网络搜索并发现this https stackoverflo
  • ios - Gamekit 的 GKOctree 未找到元素

    我正在尝试使用GKOctree https developer apple com documentation gameplaykit gkoctree用于高效检索 3D 空间中的对象 然而 以下代码似乎没有按预期工作 import Gam
  • 设置/覆盖 UICollectionView 中单元格之间的填充

    我有一个 UICollectionView 但在获取单元格之间的填充时遇到了问题 理论上 我应该能够将屏幕除以 4 并且我可以获得包含 4 个图像的单元格大小 完美地占据屏幕宽度 但是 它选择不这样做 相反 它会创建 3 个具有巨大填充的图
  • 如何使用完成处理程序等待 firestore 请求的完成

    我正在慢慢地了解完成处理程序 如果我有一个 firestore 查询 如果我想使用完成处理程序 则有点向后工作 当 firestore 查询完成时 我必须使用completion 但它的设置功能仍然让我感到困惑 因此 如果这是一个将闭包作为
  • SwiftUI:状态栏颜色

    有没有办法将 SwiftUI 视图的状态栏更改为白色 我可能错过了一些简单的东西 但我似乎找不到在 SwiftUI 中将状态栏更改为白色的方法 到目前为止我只看到 statusBar hidden Bool 状态栏文本 色调 前景色可以通过
  • 如何防止Apple Watch进入睡眠状态?

    我们正在开发一个 Apple Watch 项目 但如果不被打扰 手表就会进入睡眠状态 有什么办法可以阻止它进入睡眠状态吗 据我所知和有关该主题的其他搜索 目前还没有api可通过编程方式启用或禁用 Apple Watch 的睡眠模式
  • 如何将字符串日期转换为 NSDate?

    我想转换字符串 2014 07 15 06 55 14 198000 00 00 to an NSDate在斯威夫特 尝试这个 let dateFormatter NSDateFormatter dateFormatter dateForm
  • 在视图控制器之间传递数据使用从嵌入导航控制器的视图到 tabbarcontroller 的 Segue

    我有两个视图 我想将数据从一个视图传递到下一个视图 第一个视图是我想要传递给下一个视图的数据的地方 我们称之为SourceViewController 然而SourceViewController嵌入在一个NavigationViewCon
  • 我可以/如何用 RC3 替换我的 KVO 东西?

    我正在尝试将一个使用 Facebook 的 KVOController 的 objc 应用程序移植到 Swift 我被鼓励去看看RC3 https github com ReactiveCocoa ReactiveCocoa作为一种替代且更
  • 在 iOS 11 中创建 Gif 图像颜色贴图

    最近 我在创建 Gif 时遇到了一个问题 如果它太大 颜色就会丢失 然而 感谢 SO 的帮助 有人能够帮助我找到解决方法并创建我自己的颜色图 上一个问题在这里 保存动画 Gif 时 iOS 颜色不正确 https stackoverflow

随机推荐

  • grep --include 命令在 OSX Zsh 中不起作用

    我正在关注最佳答案如何在 Linux 上查找包含特定文本的所有文件 https stackoverflow com questions 16956810 finding all files containing a text string
  • 从 JIRA 创建 Gitlab 分支

    我最近开始使用 Gitlab 并与 Jira 集成 Gitlab 和 Jira 服务器都是在我的公司环境内部自行托管的 我遇到了一个要求 我想直接从 JIRA 问题在 Gitlab 中为项目 问题创建一个分支 有可能做到吗 如果是的话怎么办
  • 有没有办法在 mex 文件中制作 try-catch 语句?

    我知道在 C 中没有内置的方法来执行 try catch 语句 但是 MATLAB 是否为 MEX 文件提供了任何类型的 try catch 功能 我尝试使用Longjmp and Setjmp以中描述的方式http www di unip
  • 如何使用 JWT 将优惠保存到 Google 钱包?

    实际上我想保存 Google 钱包 的报价 因为在我做了一些 RND 并遇到过之前我还没有研究过它本文档 https developers google com pay passes guides get started implement
  • 如何实现一套?

    我想用C实现一个Set 创建 SET 时可以使用链表吗 还是应该使用其他方法 您通常如何实现自己的集合 如果需要 笔记 如果我使用链表方法 我的 Set 操作可能会遇到以下复杂性 初始化 O 1 销毁 O n 插入 O n 删除 O n 并
  • 如何在 Xcode 4 中使用 .xcconfig 文件?

    我刚刚切换到 Xcode 4 但在使用 xcconfig 文件进行构建设置时遇到问题 我的目标已经在 Xcode 3 中分配了文件 并且已全部设置完毕 标题为 Config file 的列显示在 构建设置 的 级别 视图中 但我不知道如何编
  • 如何创建一个修改结构体的函数

    我正在制作一个程序 使用结构将学生成绩放入数组中作为期末练习 我需要创建一个函数来检查数组中是否还有任何位置 如果没有 则数组的大小需要加倍 然后需要将成绩添加到下一个可用位置 如果数组有空缺职位 则应将等级值添加到下一个可用职位 每当数组
  • 如何确定我的应用程序是在 x86 还是 x64 Windows 上运行?

    我想知道 在运行时 我是在 32 位还是 64 位 Windows 上运行 OSVERSIONINFOEX 结构告诉我主要版本和次要版本 但我猜我需要内部版本号 有人知道它们是什么吗 如果您的应用程序是针对 64 位编译的 那么答案很简单
  • 测试登录用户在 Laravel 4 中具有正确的 id

    我正在尝试弄清楚如何测试 Laravel 4 中的登录用户是否可以访问正确的用户帐户 目前这就是我的routes php 文件中的内容 Route get user id array before gt auth function logg
  • 方案功能[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我试图解释这个方案函数的作用 define y s lis cond null lis equal s car lis lis else
  • 如何将 FragmentTabHost 选项卡放在屏幕底部?

    我已经尝试过以下代码 它对齐选项卡小部件上方的框架布局 但它仍然不起作用
  • 在 Android 中以编程方式添加 FilterChips

    我正在尝试做出一个有多种选择的芯片选择 就我而言 我将有动态选择 因此我必须动态创建芯片 我成功地动态创建了它 但由于多重选择需要一个名为style style Widget MaterialComponents Chip Filter 我
  • Linux 内核:为什么调用 kstrtol 会崩溃?

    我正在学习内核编程 并且对 kstrtol 进行了简单的调用 我用它来将字符串转换为数字 然而 每次我编译这个模块并使用 insmod 将其放入内核时 我都会收到 BUG 无法处理 f862b026 处的内核分页请求 然后是寄存器和堆栈转储
  • 对象不支持项目分配错误

    In my views py我在保存表单之前分配值 我以前是按以下方式做的 projectForm lat session results lat projectForm lng session results lng 现在 由于变量列表有
  • DACPAC 不包括复合对象

    我有一个 VS2012 数据库项目 其中包括表 存储过程 视图等 然后我有第二个数据库项目 其中包含对第一个项目的数据库引用 我已确保从 项目属性 gt 调试 gt 高级 菜单中选择 包括复合对象 选项 当我构建第二个项目并获取生成的 DA
  • 为什么我可以通过字符串索引来获取属性值但不能设置它?

    我试图解决这另一个问题的问题 https stackoverflow com questions 67809891 is it possible to reduce generic objects with unknown property
  • 如何在Android中制作倒计时器?

    我有两个 XML 格式的 EditText 在一个 EditText 中 用户可以输入一个数字作为分钟 在另一个 EditText 中输入一个数字作为秒 单击完成按钮后 EditText 应该开始倒计时并每秒更新其文本 此外 我怎样才能保持
  • 如何使用 T-SQL 或 .net 代码将 Mdf/ldf 数据库文件转换为 .bak 文件(数据库恢复)

    我有 sql server 数据库文件 Mdf Ldf 我想使用 T SQL 命令或 net 代码 C 或 Vb net 将它们转换为备份文件 有什么建议 thans BACKUP DATABASE NameOfDatabase TO DI
  • 使用套接字时避免垃圾收集

    在我的一个游戏项目中 我尽力避免创建对象 从而阻止垃圾收集器运行 这是一个网络游戏 我主要发送数据的字节数组 但也发送一些其他对象 例如 int 数组 我在分析 Eclipse 中的内存分配时注意到 通过我向套接字写入 读取的方式 在我的程
  • 无法使用变异成员...因为追加?

    我很困惑为什么会收到此错误 swift 4 2 1 next select only entries in range let filteredDataOpt TimeSeriesEntry filteredApps map data in