Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics CGFloat:浮点时调用rintf(),双精度时调用rint()_Generics_Swift_Cgfloat - Fatal编程技术网

Generics CGFloat:浮点时调用rintf(),双精度时调用rint()

Generics CGFloat:浮点时调用rintf(),双精度时调用rint(),generics,swift,cgfloat,Generics,Swift,Cgfloat,当体系结构为32位时,CGFloat为Float。 在这种情况下,我想调用rintf() 当体系结构为64位时,CGFloat为双精度。 在这种情况下,我想调用rint() 我目前正在执行一个转换,以加倍,然后调用rint() 或许泛型可以很好地处理这两种情况?尽管必须打开参数类型并提供默认情况是很糟糕的 func round<T: FloatingPointNumber>(value: T) -> T { switch value { case let value a

当体系结构为32位时,CGFloat为Float。 在这种情况下,我想调用
rintf()

当体系结构为64位时,CGFloat为双精度。 在这种情况下,我想调用
rint()

我目前正在执行一个转换,以加倍,然后调用
rint()


或许泛型可以很好地处理这两种情况?

尽管必须打开参数类型并提供默认情况是很糟糕的

func round<T: FloatingPointNumber>(value: T) -> T {
  switch value {
  case let value as Float:
    return rintf(value) as T
  case let value as Double:
    return rint(value) as T
  default:
    return 0.0 as T
  }
}
协议定义是可选的,但似乎是瑞士式的

func round<T: FloatingPointNumber>(value: T) -> T {
  switch value {
  case let value as Float:
    return rintf(value) as T
  case let value as Double:
    return rint(value) as T
  default:
    return 0.0 as T
  }
}
protocol Roundable {
  typealias NumberType
  func Round() -> NumberType
}

extension Float: Roundable {
  func Round() -> Float {
    return rintf(self)
  }
}

extension Double: Roundable {
  func Round() -> Double {
    return rint(self)
  }
}