Ваше первое использование карты в порядке, так как ваш массив очень мало, и вы желание создать новый массив, чтобы затем извлечь minElement()
.
Однако, что касается вашего второй задачи не использовать карту только, чтобы установить свойство. Помните, что .map
создает совершенно новый объект, который заменяет ваш оригинал. Что-то вроде .forEach
было бы более подходящим, так как оно обновляет ваш оригинальный объект.
Использование .map
, когда вы собираетесь на преобразовании что-то, например, преобразуя массив целых чисел в массив строк.
Используйте .forEach
, когда вам просто нужно сменить недвижимость кучей предметов.
я должен был бы видеть больше вас кода, чтобы знать наверняка, но в теории, что-то, как это должно работать, чтобы обновить вашу собственность:
segmentedControlAnimated.segments.forEach { item in
return item.titleLabel!.font = UIFont(name: "HelveticaNeue-Medium", size: minimumSize!)
}
или
segmentedControlAnimated.segments.forEach { return $0.titleLabel!.font = UIFont(name: "HelveticaNeue-Medium", size: minimumSize!) }
Подробнее на основе комментариев:
Чтобы получить представление о различиях в производительности между традиционными функциями for-in и функциями более высокого порядка, такими как .map, посмотрите на функцию карт Swifts, определенную в стандартной библиотеке. (source)
public func map<T>(@noescape transform: (Generator.Element) throws -> T
) rethrows -> [T] {
let initialCapacity = underestimateCount()
var result = ContiguousArray<T>()
result.reserveCapacity(initialCapacity)
var generator = generate()
// Add elements up to the initial capacity without checking for regrowth.
for _ in 0..<initialCapacity {
result.append(try transform(generator.next()!))
}
// Add remaining elements, if any.
while let element = generator.next() {
result.append(try transform(element))
}
return Array(result)
}
Обратите внимание, что это в значительной степени то, что вы пишете в своем коде в любом случае. Таким образом, большой отрыв здесь заключается в том, что реальная выгода от использования функций более высокого порядка, таких как карта, фильтр, сокращение и forEach, не обязательно является производительностью. Это ограничение, которое вы получаете, устраняя шаблонный код. С функциями более высокого порядка вы быстрее достигаете точки, все еще создавая считываемый код.
В моих тестах разница в производительности незначительна.
Благодарим вас за подробное объяснение! Я не знал, для кого-то, это работает как шарм! – Nahouto
Я был удивлен, когда нашел его. Я думаю, что он был создан так, чтобы быстрые разработчики могли писать более сложный код, используя функции более высокого порядка. Рад, что это сработало! –
он также может быть более эффективным, чем цикл, нет? – Nahouto