Как преобразовать NSString в целое число с помощью Swift?
Мне нужно преобразовать NSString
в целое число в Swift: вот текущий код, который я использую; он не работает:
var variable = (NSString(data:data, encoding:NSUTF8StringEncoding))
exampeStruct.otherVariable = (variable).intValue
Переменная - это нормальная переменная, а exampleStruct - это структура в другом месте кода с подвариантной переменной otherVariable.
Я ожидаю, что он установит exampleStruct.otherVariable
в значение int
для NSString
, но я получаю следующую ошибку:
"Cannot convert the expression type () to type Float"
Как преобразовать NSString
в int
в Swift?
Ответы
Ответ 1
Вам нужно развернуть 2 варианта, обратите внимание, что я также объявил переменную как String, добавив там: "String". Пример:
if let variable:String = NSString(CString:"1", encoding: NSUTF8StringEncoding) {
if let otherVariable = variable.toInt() {
println(otherVariable) // "1"
}
}
В вашем случае вы должны сделать следующее:
if let variable:String = NSString(data: data, encoding: NSUTF8StringEncoding) {
if let exampeStruct.otherVariable = variable.toInt() {
println(exampeStruct.otherVariable) // "1"
}
}
Ответ 2
Мне кажется, что проблема может быть не в преобразовании Int, а в том, что exampleStruct ожидает Float.
Если это не проблема (и предоставлено, ошибки Xcode для Swift часто, похоже, больше связаны с номером строки, а не с фактической проблемой), то что-то вроде этого должно работать на вас?
var ns:NSString = "1234"
if let i = (ns as String).toInt() {
exampleStruct.otherVariable = i
}
Ответ 3
Я знаю, что вы уже получили свой ответ, но я просто хочу объяснить, что (я думаю) не может быть тривиальным
Сначала у нас есть NSData
, который мы хотим преобразовать в NSString
, потому что никто не гарантирует, что данные являются допустимым буфером UTF8, он возвращает необязательный
var variable = NSString(data:data, encoding:NSUTF8StringEncoding)
Что означает variable: NSString?
Обычно NSString
подключается к swift String
, но в этом случае мы используем конструктор NSString
- вы можете думать об этом скорее как синтаксис типа "Foundation", который не был напрямую импортирован в swift (так как нет моста для NSData
)
мы все еще можем использовать способ "Foundation" с NSString
if let unwrappedVariable = variable {
var number = unwrappedVariable.intValue
}
если number
является Float
, но строка представляет собой строковое представление целого числа
if let unwrappedVariable = variable {
var number: Float = Float(unwrappedVariable.intValue)
}
если оба number
и строка (представление) являются float:
if let unwrappedVariable = variable {
var number:Float = unwrappedVariable.floatValue
}
Во всяком случае, существует небольшая проблема с использованием Foundation. Для этих типов преобразований нет понятия необязательного значения (для int, float). Он будет возвращать 0, если он не может разобрать строку как целое число, так и float. Для этого лучше использовать быстрый родной String
:
if let variable: String = NSString(data: data, encoding: NSUTF8StringEncoding) {
if let integer = variable.toInt() {
var integerNumber = integer
var floatNumber = Float(integer)
}
}