我有一个struct Book
的书籍数组,我正在循环尝试查找其中一本书的属性是否等于特定的预定义值,然后我想重新排列元素
if books.contains(where: { $0.structProperty == value }) {
books.rearrange(from: $0, to: 1)
}
这是在数组扩展文件
中声明的重新排列函数extension Array {
mutating func rearrange(from: Int, to: Int) {
insert(remove(at: from), at: to)
}
}
使用此设置我收到此编译错误:
匿名闭包参数未包含在闭包
中
如何在不依赖for循环的情况下实现它?
答案 0 :(得分:1)
contains(where:)
返回一个布尔值,表示是否匹配
元素是否存在于数组中,并且
{
books.rearrange(from: $0, to: 1)
}
不是闭包 - 它是if语句中的代码块。
您需要index(where:)
,它会为您提供第一个位置
匹配元素(如果不存在,则为nil
):
if let idx = books.index(where: { $0.structProperty == value }) {
books.rearrange(from: idx, to: 1)
}
另请注意,数组的第一个索引为零,所以如果你的 意图是将数组元素移动到前面然后它应该 是
books.rearrange(from: idx, to: 0)