ios - example - swift consuming rest api
Convertir cadenas a NSURL es return nil in swift (6)
Como lo sugirió Martin R, veo THIS post y he convertido ese código objetivo-c en rápido y obtuve este código:
var url : NSString = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=/(self.latitude),/(self.longitude)&destinations=/(self.stringForDistance)&language=en-US"
var urlStr : NSString = url.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
var searchURL : NSURL = NSURL(string: urlStr)!
println(searchURL)
y esto está funcionando correctamente.
Para swift 3.0:
let url : NSString = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=/(self.latitude),/(self.longitude)&destinations=/(self.stringForDistance)&language=en-US"
let urlStr : NSString = url.addingPercentEscapes(using: String.Encoding.utf8.rawValue)! as NSString
let searchURL : NSURL = NSURL(string: urlStr as String)!
print(searchURL)
Estoy tratando de convertir una String
a NSURL
y mi código para eso es Abajo:
var url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=/(self.latitude),/(self.longitude)&destinations=/(self.stringForDistance)&language=en-US"
println("This is String: /(url)")
var remoteUrl : NSURL? = NSURL(string: url)
println("This is URL: /(remoteUrl)")
Y la consola imprime algo como esto:
This is String: https://maps.googleapis.com/maps/api/distancematrix/json?origins=-34.4232722,150.8865837&destinations=-34.4250728,150.89314939999997|-34.4356434,150.8858692|-34.4250728,150.89314939999997|-34.4356434,150.8858692|-34.4250728,150.89314939999997|-34.4356434,150.8858692|-34.423234,150.88658899999996|-34.423234,150.88658899999996|-34.428251,150.899673|-34.4257439,150.89870229999997|-34.423234,150.88658899999996|-34.4257439,150.89870229999997|-34.425376,150.89388299999996&language=en-US
This is URL: nil
El remoteUrl
es nil
y no sé cuál es el problema aquí.
Después de eso trato de ordenar String
esta manera:
var url : String = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=-34.4232722,150.8865837&destinations=-34.4250728,150.89314939999997&language=en-US"
println("This is String: /(url)")
var remoteUrl : NSURL? = NSURL(string: url)
println("This is URL: /(remoteUrl)")
Y impresiones de consola:
This is String: https://maps.googleapis.com/maps/api/distancematrix/json?origins=-34.4232722,150.8865837&destinations=-34.4250728,150.89314939999997&language=en-US
This is URL: Optional(https://maps.googleapis.com/maps/api/distancematrix/json?origins=-34.4232722,150.8865837&destinations=-34.4250728,150.89314939999997&language=en-US)
Esto está funcionando bien.
Entonces, ¿alguien puede decirme qué pasa con mi primer caso?
Creo que prueba esto, es perfectamente trabajo para mí
var url : String = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=-34.4232722,150.8865837&destinations=-34.4250728,150.89314939999997&language=en-US"
println("This is String: /(url)")
var urlStr : NSString = url.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
var remoteUrl : NSURL? = NSURL(string: url)
println("This is URL: /(remoteUrl!)")
Puede obtener el siguiente error si NSURL es nulo e intenta cargar la URL http sobre la vista web:
fatal error: unexpectedly found nil while unwrapping an Optional value
Para estar seguro deberíamos usar:
var urlStr = strLink!.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
if var url = NSURL(string: urlStr!){
println(self.strLink!)
self.webView!.loadRequest(NSURLRequest(URL: url))
}
SWIFT 3.0
Una forma segura de reparar una cadena incorrecta que se convierte en NSURL es desenvolver la variable de cadena urlPath usando "guard let"
guard let url = NSURL(string: urlPath.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)
else
{
print("Couldn''t parse myURL = /(urlPath)")
return
}
La variable llamada "urlPath" en mi ejemplo anterior sería la cadena url que ya ha declarado en otro lugar en su código.
Encontré esta respuesta porque al azar estaba obteniendo el error nulo con la ruptura de XCode en el punto en que mi cadena se convirtió en NSURL. No tenía lógica en cuanto a por qué era aleatorio, incluso cuando imprimí las URLs se verían bien. Tan pronto como agregué .addingPercentEncoding, volvió a funcionar sin problemas.
tl; dr Para cualquiera que lea esto, intente con mi código anterior y cambie "urlPath" por su url de cadena local.
como dijo blwinters, en el uso de Swift 3.0
URL(string: urlPath.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)
este trabajo para mi
let url : NSString = MyUrls.baseUrl + self.url_file_open as NSString
let urlStr : NSString = url.addingPercentEscapes(using: String.Encoding.utf8.rawValue)! as NSString
if let url = URL(string: urlStr as String) {
let request = URLRequest(url: url)
self.businessPlanView.loadRequest(request)
}