【问题标题】:Checking many strings in one go in a single (if) statement在单个 (if) 语句中一次检查多个字符串
【发布时间】:2020-04-27 15:36:44
【问题描述】:

我正在尝试检查 10 个字符串是否为空以运行我的脚本。我怎样才能合理地分解它以保持在一个功能内?我的剧本依赖于所有这些都是真实的,而且它很长,所以我不能单独审问每一个。它适用于 6 个或更少的名称。但是从名称 7 到 10,我在构建我的应用程序时遇到错误。

if (name[1] != "") && (name2[1] != "") && (name3[1] != "") && (name4[1] != "") && (name5[1] != "") && (name6[1] != "") && (name7[1] != "") && (name8[1] != "") && (name9[1] != "") && (name10[1] != "")

我收到此错误:

编译器无法合理地对该表达式进行类型检查 时间;尝试将表达式分解为不同的子表达式

【问题讨论】:

  • namename1name2等等,数组吗?并且您正在检查主题的第二个元素是否为空。对吗?
  • 是的,所以 name 将返回 [“AAAA”、“Proper Name”、“Ident2”]。或者如果输入了错误的代码,则数组返回 [“”, “”, “”]。我应该先提取表单数组吗?让 nameCheck = name[1] 然后使用 if nameCheck != “” ?
  • 你的 db 函数不正确,airportName 只会包含第二个查询的最后一行。其他一些想法,只有一个带有 OR 条件的查询而不是两个查询不是更好吗?而且这种空名称检查不也是 db 查询的一部分吗?
  • 它从 2 个不同的入口点检查该行。它有效
  • 如果它有效,它会以非常低效的方式这样做。

标签: swift compiler-errors predicate


【解决方案1】:

像这样有编号的变量名称是一个很大的危险信号。它们应该在一个数组中。

您正在寻找的是Sequence.allSatisfy(_:),它返回true,如果序列中的所有成员都满足提供的谓词:

let names = [name[1], name1[1], name2[1], ... name10[1]] // this is madness, get rid of these numbered variables

let allNamesArentEmpty = names.allSatisfy { !$0.isEmpty }
if allNamesArentEmpty { ... }

【讨论】:

  • 我明白了,所以将我的信息从 10 个数组中提取到 1 个包含 10 个对象的数组中,然后使用 1 个函数进行检查?
  • @PaulFerga 我需要更多关于您的数据的背景知识:无论如何,这 10 个nameN 数组是什么?为什么称为“名称”的东西是一个数组?
  • 你称它为airportName,但airportName[3] 是纬度,airportName[4] 是经度。那些不是名字。您需要了解结构/类,并定义一个合适的Airport 结构。然后,您可以在您的 sqlite 数据库中每行创建一个 Airport 实例,并使用适当的 iataCode: Stringname: Stringposition: CLLocationCoordinate2D 等。
  • 我没有时间正确编码。这一切都是从 airportName 开始的,然后我在锻炼距离中添加了 lat 和 long 。我稍后将其转换为位置。它只是还没有整理,但它有效。我正在努力获取我需要的所有功能,稍后会整理它。
  • @PaulFerga 那是你的电话,但你会很难处理这个烂摊子。
猜你喜欢
  • 2015-10-27
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多