Swift 对数组中的每个对象调用实例方法

Swift 对数组中的每个对象调用实例方法,swift,Swift,让我们假设这种情况:我有一个对象数组,我希望对每个对象调用实例方法。我可以这样做: //items is an array of objects with instanceMethod() available items.forEach { $0.instanceMethod() } map也存在同样的情况。例如,我想使用mappingInstanceMethod将每个对象映射到其他对象,该方法返回值: let mappedItems = items.map { $0.mappingInsta

让我们假设这种情况:我有一个对象数组,我希望对每个对象调用实例方法。我可以这样做:

//items is an array of objects with instanceMethod() available
items.forEach { $0.instanceMethod() }
map
也存在同样的情况。例如,我想使用
mappingInstanceMethod
将每个对象映射到其他对象,该方法返回值:

let mappedItems = items.map { $0.mappingInstanceMethod() }
有没有更干净的方法

例如,在Java中,可以执行以下操作:

items.forEach(Item::instanceMethod);
而不是

items.forEach((item) -> { item.instanceMethod(); });
Swift中是否有类似的语法

你试过了吗

    for item in items {
        item.instanceMethod()
    }
let mappedItems = items.map { $0.mappingInstanceMethod() }
注意调用方法的
()

编辑1:

示例代码:

class SomeObject {

    func someFunction() -> Int {
        return 5
    }
}

let array = [SomeObject(), SomeObject(), SomeObject()]

let ints = array.map { $0.someFunction()}
print(ints)
你在做什么

items.forEach { $0.instanceMethod() }
let mappedItems = items.map { $0.mappingInstanceMethod() }
这是一种干净快捷的方式。如中所述,第一个语句不能缩减 到

但是有一个例外:它与
init
方法一起工作 只需要一个论点。例如:

let ints = [1, 2, 3]
let strings = ints.map(String.init)
print(strings) // ["1", "2", "3"]

好吧,也许我应该更具体一点。我想要闭包语法,例如,它也可以用在
map
函数中。问题是,为什么您更喜欢闭包语法。闭包很好,有时也很方便——但要付出代价。在调试中,它们是“未命名”的,很难追溯。仅当您希望(比如)从外部接收闭包(作为函数的输入)并将其应用于每个元素时才使用它们,诸如此类。对于更简单的场景,请使用更简单的语义。它还将帮助您的代码读者。如果instanceMethod是struct中的一个变异函数呢?它只是一个输入错误,我已经修复了它。我知道它是有效的,我只是在寻找其他语法。正如@MartinR在评论中指出的,这是实现这一目标的“最快”的方法,没有比这更快捷的方法了。
let ints = [1, 2, 3]
let strings = ints.map(String.init)
print(strings) // ["1", "2", "3"]