Подтвердить что ты не робот

Вызов метода экземпляра для каждого объекта в массиве

Предположим, что у меня есть массив объектов, и я хочу, чтобы метод экземпляра вызова выполнялся на каждом из них. Я могу сделать что-то вроде этого:

//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?

4b9b3361

Ответ 1

Что вы делаете в

items.forEach { $0.instanceMethod() }
let mappedItems = items.map { $0.mappingInstanceMethod() }

- чистый и аккуратный способ. Как объясняется в Есть ли способ ссылаться на функцию экземпляра при вызове SequenceType.forEach?, первое утверждение не может быть уменьшено до

items.forEach(Item.instanceMethod)

Есть одно исключение: оно работает с методами init которые принимают один аргумент. Пример:

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

Ответ 2

    for item in items {
        item.instanceMethod()
    }

Ответ 3

Вы пробовали

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)