2014-10-10 23 views
2

有没有方法可以轻松确定值是否是数字?我正在通过快速标准库查看,似乎无法得出任何结论。像这样的东西:数字类swift

var val: Any = ... 
    if let number = val as? Number { 
     //do something 
    } 

我真的不需要投它只是找出它是否是一个数字。而不是做一堆Int,Double等检查。

+0

你真的不能使用类型系统来帮助你在这里?也许你的方法应该由你愿意采用的唯一一种数据参数化(数字)。例如,尝试类似'func foo (val:T){...}' – CodaFi 2014-10-11 00:33:30

+2

如果你确切地知道你想要什么,你甚至可以自己假装它。制作某种“NumericType”协议,并为您可以采用的所有类型添加空的扩展名。 – CodaFi 2014-10-11 00:40:35

+0

数字在定义它之前不是一种类型。 – 2014-10-11 04:00:20

回答

2

鉴于Any类型的变量,你可以检查它是否使用这样的功能一个号码:

func isNumber(value: Any) -> Bool { 
    return (value is Int) || (value is UInt) || (value is Float) || (value is Double) 
} 

有趣的情况下,如果变量是AnyObject型的,任何这些:

value is Int 
value is UInt 
value is Float 
value is Double 
value is Bool 

将返回true所有这些数据类型:

  • Int
  • UInt
  • Float
  • Double
  • Bool
所以例如

let x: AnyObject = false 
x is Int // <== evaluates to true 
x is Float // <== evaluates to true 
+0

是的,我试图不这样做。但感谢您的反馈。我正在寻找更像封装数字类的东西。像这样的东西:http://stackoverflow.com/questions/2659311/how-can-i-check-an-object-to-see-its-type-and-return-a-casted-object – rfrittelli 2014-10-11 13:53:07