Swift入門(九)——String與Int、Double、Float等數字相互轉換
Swift的三種轉換模式
在Swift裡面,Int、float、double等數字型別自成一派,但它們和String型別之間的轉換總是不太方便,這裡總結一下它們相互轉換的方法。總結下來一共有三種轉換模式,分別舉例說明。
一、String轉數字
這裡以String型別轉Int型別為例。String轉其他的數字型別(Float、Double等)大同小異。主要用到的方法是String型別的toInt方法。注意這個方法返回的是Int?,即一個整數可選型別。所以需要解封。
var string = "1234"
var n:Int = 0
if let number = string.toInt(){
n = number
}
這樣就得到了值為1234的的Int型別變數n。其實一開始我曾經想過,如果n沒有值(也就是說還沒有被賦值為0),解封又失敗了,那麼println(n)的結果會是什麼呢,預設為0麼?
不過仔細思考後發現,這種情況是不可能發生的。Swift是不會允許我們使用一個還沒有初始化的變數的。否則編譯器會報錯:
Variable ‘n’ used before being initialized
有點扯遠了,當然也可直接使用
var n = string.toInt()!
不過強烈不建議這麼用。即使你非常確定String一定是可以轉成Int的。
二、數字轉String
這裡以Double型別轉換String為例。比較一種簡單的寫法如下:
var number = 123.5
var string = "\(number)"
這樣就得到了值為”123.5”的String型別變數string。不過如果要寫成一個方法,使得number作為引數傳遞進來的話,這種簡寫就不行了。我們可以利用String型別的初始化方法。
var number = 123.5
var string = String(stringInterpolationSegment: number)
之所以拿Double型別來寫是因為,如果number是Int型別,直接呼叫String(number)即可生成一個String型別的變數,而現在的number是Double型別,所以需要顯式的加上外部變數名stringInterpolationSegment。這種寫法對於Int型別依然成立,不過稍顯麻煩,不過少了這個外部變數名,就無法將Double轉為String了。
個人比較推薦第二種寫法。
三、數字之間互轉
瞭解數字和String如何轉換之後,最後看一下最簡單的數字型別之間的互轉。這裡以Double轉Int為例。
和C、Java、OC等語言類似,可以使用強制型別轉換的方式:
var doubleNumber = 1.8
var intNumber = 0
intNumber = Int(doubleNumber)
println(intNumber)
這裡的輸出結果是1.也就是說doubleNumber不是四捨五入,而是精度丟失了。
或者使用嚴謹一點的構造方法來寫:
var doubleNumber = 1.8
var intNumber = 0
intNumber = Int(doubleNumber)
println(intNumber)
輸出結果依然是1