Текстовое поле возвращает ноль, когда есть пробел

Если кто-то может помочь мне понять/исправить, почему он продолжает падать/говорить, что мои результаты равны нулю, когда отправляется фактическая строка.

Я знаю, что проблема связана с пробелами, но что я делаю неправильно?

  • Когда я набираю «Привет», все работает нормально.
  • Когда я набираю «Hello Word», появляется ошибка и говорит, что это ноль.

фатальная ошибка: неожиданно найдено nil при развертывании необязательного значения

import Alamofire
import SwiftyJSON

@IBAction func searchBtn(sender: UIButton) {
  let searchTerm:String = self.searchTextField.text!
  let apiUrl = "http://localhost/v1/define?term=\(searchTerm)" 

  Alamofire.request(.GET, apiUrl!).responseJSON { response in print(response)
    let jsonData = JSON(response.result.value!)
    if jsonData["result_type"] == "exact" {
      let definitionText = jsonData["list"][0]["definition"].string
      self.resultLabel.text = definitionText
    } else {
      self.resultLabel.text = "Sorry, your word does not have a definition."
    }
  }
}

person Michael    schedule 21.12.2015    source источник
comment
Какая строка кода выдает ошибку? (Если приложение останавливается в отладчике, одна из строк должна быть выделена.)   -  person Kurt Revis    schedule 21.12.2015
comment
Вам нужно добавить процент побега   -  person Leo Dabus    schedule 21.12.2015
comment
Вы не можете напрямую использовать обычный текст при использовании его для URL-адреса, сначала необходимо закодировать его в соответствии с вашим сервером, большинство использует stringByAddingPercentEscapesUsingEncoding   -  person Tj3n    schedule 21.12.2015
comment
Я думаю, что API не возвращает никакого контента для текста Hello World.   -  person ozgur    schedule 21.12.2015
comment
developer.apple.com/library/ios/documentation/Cocoa/Reference/   -  person Leo Dabus    schedule 21.12.2015
comment
@LeoDabus Спасибо, что указали мне правильное направление. Я создал закодированную переменную, но она все равно возвращает ноль. Что я делаю не так? let encodeSearchTerm = searchTerm.stringByAddingPercentEncodingWithAllowedCharacters (NSCharacterSet.URLQueryAllowedCharacterSet())   -  person Michael    schedule 21.12.2015
comment
@ Tj3n Спасибо. Это имеет смысл. Можете ли вы привести пример того, как это использовать? Тот, который вы предложили, похоже, устарел в Swift 2.   -  person Michael    schedule 21.12.2015
comment
@Michael Hello World !!!.stringByAddingPercentEncodingWithAllowedCharacters( .URLQueryAllowedCharacterSet() ) // Hello%20World%20!!!   -  person Leo Dabus    schedule 21.12.2015


Ответы (2)


Я использую это для кодирования URL в Swift 2, надеюсь, это сработает.

let escapedSearchText = searchText.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.letterCharacterSet())!
person Tj3n    schedule 21.12.2015
comment
Большое спасибо! Работает как часы! Почему NSCharacterSet.URLQueryAllowedCharacterSet() не работает как реклама? - person Michael; 21.12.2015
comment
Я пробовал с NSCharacterSet.URLQueryAllowedCharacterSet() , и это также работает для меня: O, я использую этот letterCharacterSet только для кодирования текста поиска, но оба результата дают одну и ту же строку - person Tj3n; 21.12.2015

Вы можете попробовать использовать этот метод: stringByAddingPercentEncodingWithAllowedCharacters:

var searchTerm:String = self.searchTextField.text!
searchTerm = searchTerm.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())!
let apiUrl = "http://localhost/v1/define?term=\(searchTerm)"
person sagar.musale    schedule 21.12.2015