2014-10-10 54 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