1. 程式人生 > >Swift入門(九)——String與Int、Double、Float等數字相互轉換

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

附錄