2014-10-23 14 views
12

Quindi, prima ho scaricato l'aggiornamento recente, il seguente codice ha funzionato per me:Stringa con contenuto di Url Swift?

var g_home_url = String.stringWithContentsOfURL(NSURL(string: url_string), encoding: NSUTF8StringEncoding, error: nil) // Gives me an error: "String.Type does not have a member names stringWithContentsOfUrl" 

Sono confuso. Qual è il modo corretto per ottenere il seguente metodo obiettivo-c in rapido?

NSString * g_home_url = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:home_url] encoding:NSUTF8StringEncoding error:nil]; 

risposta

15

utilizzare il metodo al posto della convenienza inizializzatore +stringWithContentsOfURL:encoding:error: classe -initWithContentsOfURL:encoding:error: esempio.

var g_home_url = String(contentsOfURL: NSURL(string: url_string)!, encoding: NSUTF8StringEncoding, error: nil) 

ho idea se inizializzatori classe di convenienza sono ora supportati in Swift, ma non avrebbe molto senso come lo erano solo delle abbreviazioni per il boilerplate alloc-init, che non esiste in Swift.

+1

'' initWithContentsOfURL' e stringWithContentsOfURL' sono mappati * * stesso metodo Swift, e sembra che solo il metodo init può essere chiamato da Swift in questo caso. http://stackoverflow.com/questions/26491508/creating-an-object-in-swift-using-the-objective-c-factory-method-gives-a-compile descrive un problema simile. –

+0

'contentsOfURL' recupererà la risposta per quell'URL. Non so qual è la ragione. Io uso la sintassi del preventivo per convertirlo ora. http://stackoverflow.com/questions/27062454/converting-url-to-string-and-back-again/31586194#31586194 – Roger

0

Ecco che cosa ha funzionato per me: (non c'è più discussione errore)

var g_home_url = try! String(contentsOfURL: NSURL(string: url_string)!, encoding: NSUTF8StringEncoding) 

o se si vuole gestire l'errore:

do { 
    var g_home_url = try String(contentsOfURL: NSURL(string: url_string)!, encoding: NSUTF8StringEncoding) 
} 
catch { 
    print(error) 
} 
6

Per Swift 3 voi avrete utilizzare String(contentsOf:encoding:). Getta.

do { 
    var content = try String(contentsOf:URL(string: "http://your-URI-here")!) 
} 
catch let error { 
    // Error handling 
}