2015-03-20 2 views
1

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

func getWeather() { 
    let url = NSURL(string: "http://api.openweathermap.org/data/2.5/weather?q=London&mode=xml") 

    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) { 
     (data, response, error) in 
     if error == nil { 
      var urlContent = NSString(data: data, encoding: NSUTF8StringEncoding) as NSString! 
      var urlContentArray = urlContent.componentsSeparatedByString("temperature value=\"") 
      var temperatureString = (urlContentArray[1].substringWithRange(NSRange(location: 0, length:6))) as String 
      println(temperatureString) // returns 272.32 
      var final = temperatureString.toInt() 
      println(final) //returns nil 
      println(temperatureString.toInt()) 
      self.temperature.text = "\(temperatureString)" 
     } 
    } 
    task.resume() 
} 

ответ

2

Даже простой, хотя и немного трюк, вы можете использовать integerValue:

temperatureString.integerValue 

В отличие от toInt, integerValue остановит преобразование когда он находит не цифру (он также выбрасывает ведущие пробелы).

Если temperatureString является String (а не NSString), вы будете необходимо прогнать его:

(temperatureString as NSString).integerValue 
+0

Да, это именно то, что я искал! –

+0

Верьте или нет, у меня просто была эта ошибка сегодня, конвертируя некоторый код C в Swift (и мой вызов toInt завершился неудачно по той же причине). Так что я только что исследовал это ... –

1

Это потому, что 272.32 не является целым числом.

Вы могли бы convert it to a Float.

+0

Даже так, разве это не просто падение десятичных точек и сохранение его как 272? –

+1

Нет, это не так. – Thilo

+0

Нет, вы абсолютно правы, я только что проверил и 252 вернул значение, в то время как любой поплавок возвращает нуль. Спасибо за помощь! –

0

272.32 не является Целочисленным. Если ваша строка температура является NSString, вы можете сделать это, чтобы преобразовать его:

Int("272.32".floatValue)