2016-12-17 3 views
-3

У меня есть переменная типа String, в Swift, его содержание может быть следующим:Как преобразовать строку в соответствии с ее содержимым в Swift?

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

Или содержимое может быть:

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

содержание также может быть любого другого типа, имеющий более чисел и/или десятичных знаков. Как можно преобразовать строку?

Переменная только одна, не существует двух переменных. И значение переменной не является фиксированным, если оно содержит десятичное число или нет, оно может содержать число десятичной точки или может не совпадать. Единственная переменная может иметь вышеуказанные возможности хранения данных.

+0

Возможный дубликат [Swift - Преобразование строки в Int] (http://stackoverflow.com/questions/24115141/swift-conversion-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

Via:

Float(str) 

и:

Int(str) 

соответственно.

Или, если вы не знаете, числовой тип во время компиляции:

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

Не определено, содержит ли значение переменной десятичное число или нет. и переменная является одиночной, значение переменной изменяется в соответствии с пользовательским вводом. вторая переменная, поставленная в вопрос, - это просто показать возможности, которые может содержать строка. –

+0

@MohitMishra: То, что вы хотите, это 'NSNumber'. –

+0

Я просто хочу преобразовать строку соответственно. И содержимое строки не предопределено, это зависит от ввода пользователя. Если пользователь вводит число десятичной точки, то я хочу изменить его на тип float. И если пользователь просто вводит число без десятичной точки, то я хочу изменить его на тип 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 
Смежные вопросы