2014-10-30 3 views
11

Мне нужно преобразовать NSString в целое число в Swift: Вот текущий код, который я использую; он не работает:Как преобразовать NSString в целое число с помощью Swift?

var variable = (NSString(data:data, encoding:NSUTF8StringEncoding)) 
exampeStruct.otherVariable = (variable).intValue 

Переменная нормальная varable и exampleStruct является структурой в другом месте в коде с subvariable otherVariable.

Я ожидаю, что установить exampleStruct.otherVariable к int значению NSString, но я получаю следующее сообщение об ошибке:

"Cannot convert the expression's type() to type Float" 

Как преобразовать NSString в int в Swift?

+9

Как насчет быстрого просмотра документации? https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/#//apple_ref/occ/instp/NSString/intValue. –

ответ

1

Вы должны разворачивать 2 УСТРОЙСТВА там, заметили, что я также объявленную переменную как строка добавления «: 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" 
    } 
} 
+0

Функция toInt() удалена в Swift 2. Мы должны использовать конструктор int, который принимает строку - Int (myString). Пожалуйста, обратитесь к этому ответу для получения дополнительной информации: http://stackoverflow.com/a/30739522/878414 – Vaquita

1

Мне кажется, что проблема может быть не в преобразовании Int, а в том, что exampleStruct ожидает Float.

Если это не проблема (и предоставлены, ошибки Xcode для Swift часто, похоже, больше касаются номера строки, а не фактической проблемы), тогда что-то вроде этого должно работать на вас?

var ns:NSString = "1234" 
if let i = (ns as String).toInt() { 
    exampleStruct.otherVariable = i 
} 
1

Я знаю, что вы уже получили ответ на свой вопрос, но я просто хочу объяснить, что (я думаю) не может быть тривиальным

Во-первых, у нас есть некоторые NSData мы хотим преобразовать в NSString, потому что никто не гарантирует данных является допустимым буфера UTF8, он возвращает дополнительный

var variable = NSString(data:data, encoding:NSUTF8StringEncoding) 

Что означает variable: NSString?

Обычно NSString соединяется с Свифта String, но в данном случае мы используем NSString конструктор - вы можете думать о нем как «Фонд» -like синтаксисом, который не был непосредственно импортируемого стриж (поскольку нет никакого моста для NSData)

мы можем использовать путь 'Foundation' с NSString

if let unwrappedVariable = variable { 
    var number = unwrappedVariable.intValue 
} 

если number является Float, но строка представляет собой строковое представление целого числа

if let unwrappedVariable = variable { 
    var number: Float = Float(unwrappedVariable.intValue) 
} 

если оба number и строка (представление) являются поплавки:

if let unwrappedVariable = variable { 
    var number:Float = unwrappedVariable.floatValue 
} 

Во всяком случае, есть небольшая проблема с использованием Фонд. Для этих типов преобразований нет понятия необязательного значения (для 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) 
    } 
}