在闭包内使用隐式数组值

时间:2018-05-20 14:02:36

标签: swift

我有一个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循环的情况下实现它?

1 个答案:

答案 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)