Swift 为什么可以’;在>;操作人员

Swift 为什么可以’;在>;操作人员,swift,generics,types,measurement,Swift,Generics,Types,Measurement,为什么不能在>运算符中推断出UnitType import Foundation let mass = Measurement(value: 50, unit: UnitMass.kilograms) mass > Measurement(value: 100, unit: .kilograms) 类型“Unit”没有成员“kg” 运算符的定义意味着它应该: static func > (Measurement<UnitType>, Measurement<Uni

为什么不能在>运算符中推断出
UnitType

import Foundation
let mass = Measurement(value: 50, unit: UnitMass.kilograms)
mass > Measurement(value: 100, unit: .kilograms)
类型“Unit”没有成员“kg”

运算符的定义意味着它应该:

static func > (Measurement<UnitType>, Measurement<UnitType>) -> Bool
静态功能>(测量,测量)->Bool

问题在于,
测量是一种通用类型,因此在初始化新对象时需要指定单位类型。如果希望推断类型,则需要使用
.init
初始值设定项,该初始值设定项将推断单位质量类型
init(值:双精度,单位:单位质量)


您得到的错误
类型“Unit”没有成员“kg”
似乎与>功能无关。您是说
质量>测量…
而不是
重量>测量…
?如果不是,什么是重量?
?如果你想说质量>测量…,那么这是因为某种原因:
mass>.init(值:100,单位:.kg)
@TylerTheCompiler我正要发布这篇文章,因为
测量
可以用来初始化任何单位类型
。init
假设
lhs
类型
init(值:双精度,单位:单位质量)
有趣。那么为什么在这里推断出单位类型:
让质量:度量=度量(值:50,单位:。千克)
?编译器知道我想要分配一个
度量值
,因为我在左边指定了它。同样地,编译器应该在我的问题中的比较中知道这一点,因为它知道
mass
Measurement
。我不知道类型推断在幕后是如何工作的,但你可以将其作为一个bug报告给苹果,看看他们怎么说。在我看来,这应该是双向的。可能的答案是不加评论地关闭罚单;)…无论如何,我可能会试试。谢谢!
mass > .init(value: 100, unit: .kilograms)