您第一次使用的地图是罚款,因为你的阵列是非常小的,你的愿望是创建一个新的数组,然后检索minElement()
。
然而,关于你的秒任务,不使用地图只是设置一个属性。请记住,.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)
}
请注意,它几乎是你在代码中写的东西。所以,这里最重要的是使用像map,filter,reduce和forEach这样的高阶函数的真正好处不一定是性能。这是通过消除样板代码而获得的简洁。使用更高阶的函数,您可以更快地获得点,同时还能生成可读代码。
在我的测试中,性能差异可以忽略不计。
谢谢您的详细解释!我不知道forEach,它就像一个魅力! – Nahouto
当我发现它时,我很惊讶。我认为这是为了让快速开发人员可以使用更高阶的函数编写更多简洁的代码。很高兴它解决了! –
它也可能比循环更有效率,不是吗? – Nahouto