2014-10-23 16 views
12

Więc zanim Pobrałem najnowszą aktualizację, następujący kod pracował dla mnie:String z zawartością 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" 

Jestem zdezorientowany. Jaki jest właściwy sposób na uzyskanie szybkiej metody obiektywnej?

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

Odpowiedz

15

Użyj metody -initWithContentsOfURL:encoding:error: instancji zamiast wygody inicjatora +stringWithContentsOfURL:encoding:error: klasy.

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

nie mam pojęcia, czy inicjalizatory klasa wygoda są obecnie nieobsługiwane w Swift, ale czy to ma sens, gdyż były one tylko shorthands dla boilerplate Alloc-init, który nie istnieje w Swift.

+1

'' stringWithContentsOfURL' initWithContentsOfURL' i są odwzorowywane na samego * * metody Swift i wydaje się, że tylko metoda startowych mogą być wywoływane z Swift w takim przypadku. http://stackoverflow.com/questions/26491508/creating-an-object-in-swift-using-the-objective-c-factory-method-gives-a-compile opisuje podobny problem. –

+0

'contentsOfURL' pobierze odpowiedź dla tego adresu URL. Nie wiem, jaki jest powód. Używam składni cytatu, aby ją teraz przekonwertować. http://stackoverflow.com/questions/27062454/converting-url-to-string-and-back-again/31586194#31586194 – Roger

0

Oto co pracował dla mnie: (Nie ma więcej błędów argumentem)

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

lub jeśli chcesz obsłużyć błąd:

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

Dla Swift 3 musisz używać String(contentsOf:encoding:). Rzuca.

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