это мой первый вопрос, и я новичок в Swift
Для некоторого фона: я делаю приложение, которое получает HTML со страницы, декодирует его, а затем отображает. Я уже выяснил, как получить HTML и декодировать его, но когда я пытаюсь отобразить его, он выдает следующее сообщение об ошибке: Неустранимая ошибка: неожиданно обнаружил ноль при развертывании необязательного значения. Я действительно запутался, потому что он может печатать декодированный HTML в консоли. Вот мой код (1-я страница, на которой происходит сбой при попытке отобразить строку HTML, 2-я - там, где HTML извлекается и декодируется):
class LatinViewController: UIViewController {
@IBOutlet weak var textLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
textLabel.sizeToFit()
textLabel.text = "Loading..."
}
func getLabel(get label: String) {
print(label)
textLabel.text = label
}
}
import Foundation
struct SearchBrain {
let latinViewController = LatinViewController()
let englishViewController = EnglishViewController()
func makeLatinURL(get latinWord: String) {
if let url = URL(string: "http://archives.nd.edu/cgi-bin/wordz.pl?keyword=\(latinWord)") {
getContents(use: url, sender: K.senderLatin)
print(url)
}
}
func makeEnglishURL(get englishWord: String) {
if let url = URL(string: "http://archives.nd.edu/cgi-bin/wordz.pl?english=\(englishWord)") {
getContents(use: url, sender: K.senderEnglish)
}
}
// This gets the Html from WWW and decodes it
func getContents(use url: URL, sender: String) {
DispatchQueue.global().async {
do {
let contents = try String(contentsOf: url)
// print("This is the encoded string: \(contents)")
if let decodedString = String(htmlEncodedString: contents) {
// print("This is the decoded string: \(decodedString)")
if sender == K.senderLatin {
self.latinViewController.getLabel(get: decodedString)
} else if sender == K.senderEnglish {
self.englishViewController.getLabel(get: decodedString)
}
}
} catch {
print("There was an error getting the cotents of WWW: \(error)")
}
}
}
}
extension String {
init?(htmlEncodedString: String) {
guard let data = htmlEncodedString.data(using: .utf8) else {
return nil
}
let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
.documentType: NSAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue
]
guard let attributedString = try? NSAttributedString(data: data, options: options, documentAttributes: nil) else {
return nil
}
self.init(attributedString.string)
}
}
Спасибо заранее!