Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Swift阵列<;设置>;如果$0集合与另一个集合匹配,如何映射并返回true?_Arrays_Swift - Fatal编程技术网

Arrays Swift阵列<;设置>;如果$0集合与另一个集合匹配,如何映射并返回true?

Arrays Swift阵列<;设置>;如果$0集合与另一个集合匹配,如何映射并返回true?,arrays,swift,Arrays,Swift,我有一个数组,里面有几个不同的集合- [[“播放”]、[“播放消息”]、[“播放消息自”]等 我正在使用语音识别来获取一些用户输入的命令,我有一个不同命令的数组(播放、消息)等等,我从所说的单词数组和我的标签数组的交集构建一个集合 因此,如果用户说:“你能播放消息吗?”我就可以从语音命令中获得[“播放”,“消息”],然后我想检查ARR命令,看看这组命令和它持有的命令之间是否匹配 我试着这样做: let isCommand = arrCommands.map { if setTags.isSubs

我有一个数组,里面有几个不同的集合- [[“播放”]、[“播放消息”]、[“播放消息自”]等

我正在使用语音识别来获取一些用户输入的命令,我有一个不同命令的数组(播放、消息)等等,我从所说的单词数组和我的标签数组的交集构建一个集合

因此,如果用户说:“你能播放消息吗?”我就可以从语音命令中获得[“播放”,“消息”],然后我想检查ARR命令,看看这组命令和它持有的命令之间是否匹配

我试着这样做:

let isCommand = arrCommands.map { if setTags.isSubset(of: $0) { return true } }
但是我得到了这个错误:无法推断复杂的闭包返回类型;添加显式类型以消除歧义

但是添加->Bool会引发一系列错误消息。我确信这很简单,我只是错过了它,但任何帮助都会很好。

我相信您想要:

let isCommand = arrCommands.contains { setTags.isSubset(of: $0) }
如果这不能通过,那么您可能在某个地方存在类型不匹配

请注意,您的结束语:

{ if setTags.isSubset(of: $0) { return true } }
如果条件为
true
,它将返回
Bool
,如果条件为
false
,它将返回
Void
。编译器将无法确定返回类型应该是什么。

我相信您想要:

let isCommand = arrCommands.contains { setTags.isSubset(of: $0) }
如果这不能通过,那么您可能在某个地方存在类型不匹配

请注意,您的结束语:

{ if setTags.isSubset(of: $0) { return true } }

如果条件为
true
,它将返回
Bool
,如果条件为
false
,它将返回
Void
。编译器将无法确定返回类型应该是什么。

编译器建议使用该语法

arrCommands.map { item -> T in
    return ...
}

并将
T
替换为静态(返回)类型。

编译器建议使用该语法

arrCommands.map { item -> T in
    return ...
}
并将
T
替换为静态(返回)类型。

以下是您的声明:

let isCommand = arrCommands.map { if setTags.isSubset(of: $0) { return true } }
let isCommand = arrCommands.map { if setTags.isSubset(of: $0) { return true } else { return false } }
因此,当
setTags.isSubset(of:$0)
时,
返回true

当条件为false时会发生什么情况?您没有任何其他
return
语句。因此,当条件为false时,闭包返回
()
(也称为
Void

要推断闭包返回的类型,编译器需要找到一个类型,该类型同时是
Bool
Void
的超类型。不存在这样的类型。编译器放弃了查找它的尝试,并发出一条不太有用的错误消息

您可以通过添加第二条
return
语句来解决此问题:

let isCommand = arrCommands.map { if setTags.isSubset(of: $0) { return true } }
let isCommand = arrCommands.map { if setTags.isSubset(of: $0) { return true } else { return false } }
但是一般来说,
如果x{return true}否则{return false}
的意思与
返回x
的意思完全相同。因此,请简化:

let isCommand = arrCommands.map { return setTags.isSubset(of: $0) }
由于闭包中只有一条语句,您甚至可以省略
return
关键字:

let isCommand = arrCommands.map { setTags.isSubset(of: $0) }
以下是你的声明:

let isCommand = arrCommands.map { if setTags.isSubset(of: $0) { return true } }
let isCommand = arrCommands.map { if setTags.isSubset(of: $0) { return true } else { return false } }
因此,当
setTags.isSubset(of:$0)
时,
返回true

当条件为false时会发生什么情况?您没有任何其他
return
语句。因此,当条件为false时,闭包返回
()
(也称为
Void

要推断闭包返回的类型,编译器需要找到一个类型,该类型同时是
Bool
Void
的超类型。不存在这样的类型。编译器放弃了查找它的尝试,并发出一条不太有用的错误消息

您可以通过添加第二条
return
语句来解决此问题:

let isCommand = arrCommands.map { if setTags.isSubset(of: $0) { return true } }
let isCommand = arrCommands.map { if setTags.isSubset(of: $0) { return true } else { return false } }
但是一般来说,
如果x{return true}否则{return false}
的意思与
返回x
的意思完全相同。因此,请简化:

let isCommand = arrCommands.map { return setTags.isSubset(of: $0) }
由于闭包中只有一条语句,您甚至可以省略
return
关键字:

let isCommand = arrCommands.map { setTags.isSubset(of: $0) }

这里的问题是他的闭包没有静态返回类型。不存在这样的类型。那么
map
函数就不适合这个目的。
T
应该是数组映射到的类型。这里的问题是他的闭包没有静态返回类型。不存在这样的类型。然后
map
函数不适用于此目的。
T
应该是数组映射到的类型。感谢您为我详细说明。感谢您为我详细说明。