You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift报错:Binary operator '+'无法应用于两个Set<String>操作数求修复

修复Set合并的报错问题

首先,咱们来拆解下报错的核心原因:你代码里的before和mynewarray都是Set<String>类型,而Swift的Set并没有提供+运算符来直接拼接两个集合,这就是为什么会弹出Binary operator '+' cannot be applied to two 'Set<String>' operands提示的原因。

直接修复报错的方案

你可以用Set自带的union(_:)方法来合并两个集合——这个方法会返回一个包含两个集合所有唯一元素的新Set,完全适配你的需求。把报错的那行代码改成这样就行:

let merge = Array(before.union(mynewarray))

要是你更习惯类似数组的拼接写法,也可以把其中一个Set转成数组再相加,最后转回Set(不过这种方式效率不如union高):

let merge = Array(Set(Array(before) + Array(mynewarray)))

优化你的整体代码逻辑

另外,我注意到你原来的代码有不少冗余的转换步骤,其实可以大幅简化,让逻辑更清晰:

// 直接将原始数组转成Set去重
let beforeSet = Set(beforevalues)
let myOriginalSet = Set(myvalues)

// 过滤出包含"today"的元素,直接得到目标Set
let filteredTodaySet = myOriginalSet.filter { $0.range(of: "today") != nil }

// 合并两个Set后转回数组
let mergedArray = Array(beforeSet.union(filteredTodaySet))

这里做了这些优化:

  • 去掉了不必要的数组↔Set来回转换,比如你原来把Set转成数组又转回Set的操作,完全可以直接用Set完成
  • 用Swift 3+的range(of:)替代了旧版的rangeOfString方法(如果还在用旧版本Swift,改回原来的写法就行)
  • 变量命名更直观,比如filteredTodaySet一眼就能看出它的用途,避免混淆

这样既解决了报错问题,也让代码更简洁高效。

内容的提问来源于stack exchange,提问作者SwiftDeveloper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:37:09