reduce() vs. reduce(into:)
`reduce(_:_:)``reduce(into:_:)`
所以使用reduce(into:_:)時要注意:「一定要透過 updateAccumulatingResult 來更新 partialResult」,否則回傳值會是原來的 initialResult❗
// `reduce(_:_:)`
func reduce<Result>(
_ initialResult : Result,
// ⭐️ combine function (with return value)
_ nextPartialResult: (Result, Element) throws -> Result
) rethrows -> Result
// `reduce(into:_:)`
func reduce<Result>(
into initialResult: Result,
_ updateAccumulatingResult: (
_ partialResult: inout Result, // ⭐️ inout parameter
Self.Element
) throws -> () // ⭐️ no return value
) rethrows -> Result.reduce(into:) is preferred over reduce() for efficiency when the result is a copy-on-write type, for example an Array or a Dictionary. 👉 .reduce(into:_:)
Example
我們用合併 SwiftUI 中的 transitions 來舉例,說明這兩者的用法有哪些不同。在合併 SwiftUI 中的 transitions 時,使用 SwiftUI 原有的語法,顯得太過冗長:
若使用 .reduce() 或 .reduce(into:),則可以將語法變為更精簡:
前提是要先加入以下的 extension:
至於用 .reduce() 還是 .reduce(into:)?它們之間有何不同,請看下面的程式碼:
.reduce()
.reduce(into:)
Last updated
Was this helpful?