gpt4 book ai didi

swift - `sum` 测量序列扩展

转载 作者:行者123 更新时间:2023-11-30 13:05:33 27 4
gpt4 key购买 nike

这是我目前所拥有的。它至少存在以下问题:

  1. 当在 Measurement<UnitType> 数组上使用时,它会崩溃。 , 什么时候单位是混合的,例如克和毫克。
  2. 使用实例 zero属性不如静态替代方案好,静态替代方案允许返回类型为类型的 zero ,而不是 nil ,对于空序列。我不知道这是否可以避免。

我使用第一个扩展名,因为 Sequence.first当前版本的 Swift 中不存在。 🤔

import Foundation

public extension Sequence {
var first: Iterator.Element? {
return self.first{_ in true}
}
}

public extension Sequence where Iterator.Element: SummableUsingInstanceZero {
var sum: Iterator.Element? {
guard let zero = first?.zero
else {return nil}

return self.reduce(zero, +)
}
}

public protocol SummableUsingInstanceZero {
static func + (_: Self, _: Self) -> Self

var zero: Self {get}
}

extension Measurement: SummableUsingInstanceZero {
public var zero: Measurement {
return Measurement(
value: 0,
unit: unit
)
}
}

最佳答案

这个问题很老了,但解决方案仍然不是内置的。遵循 AdditiveArithmetic 是正确的选择!

import Foundation

extension Measurement: AdditiveArithmetic where UnitType: Dimension {
public static var zero: Self {
Self( value: 0, unit: .baseUnit() )
}

public static func += (measurement0: inout Self, measurement1: Self) {
measurement0 = measurement0 + measurement1
}

public static func -= (measurement0: inout Self, measurement1: Self) {
measurement0 = measurement0 - measurement1
}
}

关于swift - `sum` 测量序列扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39417830/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com