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