2016-12-17 65 views
-3

我在夫特String類型的變量,其含量可以爲如下:如何根據其在Swift中的內容轉換字符串?

var str:String = "45.7" //content is of float type 

或者,內容可以是:

var str:String = "45" //content is of int type 

內容也可以是具有多個的任何其它類型數字和/或小數。我怎樣才能相應地轉換字符串?

該變量只有一個,沒有兩個變量。而且變量的值不是固定的,如果它包含一個小數或不包含,它可能包含一個小數點數或不可以。單個變量可能具有上述存儲數據的可能性。

+0

的可能的複製[斯威夫特 - 字符串轉換爲INT](http://stackoverflow.com/questions/24115141/swift-converting-string-to-int) – FelixSFD

回答

1

您可以使用if let了點。

var str:String = "45.7" //content is of float type 
if let _ = str.range(of: "."), let floatValue = Float(str) {   
    //Execute if string contains float value 
    print(floatValue) 
} 
else if let intValue = Int(str) { 
    //Execute if string contains integer value 
    print(intValue) 
} 
+0

如果字符串是「45」,轉換爲「Float」仍然成功,雖然它將是一個整數 – FelixSFD

+0

@FelixSFD同時檢查編輯答案的更多細節,因爲如果字符串包含多個'.'它會崩潰,現在它將不會。 –

0

途經:

Float(str) 

和:

Int(str) 

分別。

或者,如果你不知道在編譯時的數值類型:

NumberFormatter().number(from: str) 
+0

變量的值是否包含小數不是固定的。而變量是單個的,變量的值根據用戶輸入而改變。我提出的第二個變量只是爲了展示String可以包含的可能性。 –

+0

@MohitMishra:你想要的是'NSNumber'。 –

+0

我只是想相應地轉換字符串。而字符串的內容並不是預先確定的,這取決於用戶的輸入。如果用戶輸入一個小數點的數字,那麼我想將其更改爲浮點類型,如果用戶只是輸入一個非小數點數,那麼我想將其更改爲Int類型。 –

0

在你playground

func isContainPoint(_ string:String) -> Bool { 

    if string.contains(".") { 

     return true 
    }else { 

     return false 
    } 
} 

var str1:String = "45.7" //content is of float type 

var str2:String = "45" //content is of int type 



if isContainPoint(str1) { 

    print("\(Float(str1)!)") 
}else { 
    print("\(Int(str1)!)") 
} 

if isContainPoint(str2) { 

    print("\(Float(str2)!)") 
}else { 
    print("\(Int(str2)!)") 
} 

結果是:

45.7 
45 
相關問題