gpt4 book ai didi

ios - 如何在方法参数中使用 Raw 类型来遵守协议(protocol)方法?

转载 作者:搜寻专家 更新时间:2023-11-01 06:22:55 25 4
gpt4 key购买 nike

protocol Measurement {
mutating func convert(#toUnit: String)
}

enum MassUnit : String {
case Milligram = "mg"
}

enum VolumeUnit : String {
case Milliliter = "ml"
}

struct Mass : Measurement {
mutating func convert(#toUnit: MassUnit)
// Build error: Does not adhere to 'Measurement'
}

struct Volume : Measurement {
mutating func convert(#toUnit: VolumeUnit)
// Build error: Does not adhere to 'Measurement'
}

func +<T: Measurement> (left:T, right:T) -> Measurement {
let newRightValue = right.convert(toUnit: left.unit)
return T(quantity: left.quantity + newRightValue.quantity , unit: left.unit)
}

如何使质量正确遵守测量Measurement 协议(protocol)需要做哪些更改才能使其与 String 类型的枚举一起使用?

问题更新了关于为什么转换方法签名应该说明给定参数的更多信息。该代码是我正在构建的名为 Indus Valley 的开源单元框架的一部分。

最佳答案

您可能会将 enum MassUnit : String 与继承混淆。

class ChildClass : ParentClass 表示 ChildClass 继承自 ParentClassenum MassUnit : String 具有略有不同的含义,告诉枚举的原始类型String,而不是说枚举继承了String类型。

因此 MassUnit 不是字符串类型。 MassUnitrawValue 是字符串类型,但要访问它,您需要调用枚举的 rawValue 属性来获取 String 等效。

因此,mutating func convert(#toUnit: String)mutating func convert(#toUnit: MassType) 不兼容,因为 MassType 本身不是 String。只有它的 rawValue 是。

关于ios - 如何在方法参数中使用 Raw 类型来遵守协议(protocol)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30109996/

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