让我们假设这种情况:我有一个对象数组,我想在每个对象上调用实例方法.我可以这样做:
//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中有类似的语法吗?
你在做什么
items.forEach { $0.instanceMethod() } let mappedItems = items.map { $0.mappingInstanceMethod() }
是一个干净和Swifty方式.正如在调用SequenceType.forEach时有没有办法引用实例函数?,第一个声明不能简化为
items.forEach(Item.instanceMethod)
但有一个例外:它适用于init
采用单个参数的方法.例:
let ints = [1, 2, 3] let strings = ints.map(String.init) print(strings) // ["1", "2", "3"]