Ответ 1
Отказ от ответственности. Поскольку это очень много просмотров, я просто хочу напомнить всем, что этот ответ здесь синхронный и заблокирует ваше приложение, если вы сделаете это в основном потоке. Вы всегда должны делать это асинхронно или в фоновом потоке, но вопрос задан для синхронного метода, поэтому было бы невозможно объяснить, как это сделать здесь.
Вероятно, вам стоит посмотреть на метод:
+ stringWithContentsOfURL:encoding:error
(docs)
Вы бы назвали это так в Objective C:
NSString *myURLString = @"http://google.com";
NSURL *myURL = [NSURL URLWithString:myURLString];
NSError *error = nil;
NSString *myHTMLString = [NSString stringWithContentsOfURL:myURL encoding: NSUTF8StringEncoding error:&error];
if (error != nil)
{
NSLog(@"Error : %@", error);
}
else
{
NSLog(@"HTML : %@", myHTMLString);
}
Итак, в Swift 3 и 4 эквивалент будет:
let myURLString = "https://google.com"
guard let myURL = URL(string: myURLString) else {
print("Error: \(myURLString) doesn't seem to be a valid URL")
return
}
do {
let myHTMLString = try String(contentsOf: myURL, encoding: .ascii)
print("HTML : \(myHTMLString)")
} catch let error {
print("Error: \(error)")
}
Возможно, вы захотите адаптировать кодировку (см. константы) в зависимости от того, какую кодировку использует ваша страница.
Старый ответ, Swift 2.2:
let myURLString = "http://google.com"
guard let myURL = NSURL(string: myURLString) else {
print("Error: \(myURLString) doesn't seem to be a valid URL")
return
}
do {
let myHTMLString = try String(contentsOfURL: myURL)
print("HTML : \(myHTMLString)")
} catch let error as NSError {
print("Error: \(error)")
}
Старый ответ, Swift 1.2:
let myURLString = "http://google.com"
if let myURL = NSURL(string: myURLString) {
var error: NSError?
let myHTMLString = NSString(contentsOfURL: myURL, encoding: NSUTF8StringEncoding, error: &error)
if let error = error {
println("Error : \(error)")
} else {
println("HTML : \(myHTMLString)")
}
} else {
println("Error: \(myURLString) doesn't seem to be a valid URL")
}