在Swift中使用三元运算符将Double转换为String

时间:2016-09-09 17:35:41

标签: swift ternary-operator

在swift中使用双精度时需要消除额外的零值(例如3.0应输出3和3.2应为3.2)

//description is String; operand is Double

// works
(operand - floor(operand) != 0) ? (description += String(operand)) : (description += String(Int(operand)))

// not works
description += String( (operand - floor(operand) != 0) ? operand : Int(operand) )

为什么三元运算符在第二个版本中出错?有没有其他方法可以避免重复的代码?

2 个答案:

答案 0 :(得分:1)

关于使用三元运算符有很多规则。其中之一是:字符左侧和右侧的操作数必须是兼容类型。

在您的代码中,

(operand - floor(operand) != 0) ? operand : Int(operand)

:的左侧是Double,而右侧是Int。 <{1}}和Double不兼容,因此无法编译。

解决方法:

Int

如果您想要更少的重复代码,就字符数而言,您可以将两个操作数转换为description += "\((operand - floor(operand) != 0) ? operand as AnyObject: Int(operand) as AnyObject)" // now the two sides are both AnyObjects now! 而不是Any

答案 1 :(得分:0)

description += String( (operand - floor(operand) != 0) ? operand : Int(operand) ). 

这个三元运算有不同的结果类型,double和int。