在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) )
为什么三元运算符在第二个版本中出错?有没有其他方法可以避免重复的代码?
答案 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。