首页 > 解决方案 > 为什么 Numeric 在 Swift 中使用负值?

问题描述

我做了这个 2 函数,两者工作相同,我期待使用负数时带有数字协议的函数出错,但错误没有发生!现在两者都有效,为什么会这样?当我需要 Numeric 以及何时需要 SignedNumeric 时?

func addition<T: Numeric>(a: T, b: T) -> T {
  return a + b
}
    
func addition<T: SignedNumeric>(a: T, b: T) -> T {
  return a + b
}

用例:

let add = addition(a: -3, b: -2)

标签: swift

解决方案


带有协议的 FuncNumeric不应在您的用例中引发任何错误,因为它不排除任何负数。相反,这将引发错误:

func addition<T: UnsignedInteger>(a: T, b: T) -> T {
  return a + b
}

let add = addition(a: -3, b: -2)

推荐阅读