Присвоение строки массиву возвращает ноль - Swift - PullRequest
1 голос
/ 17 марта 2020

Когда веб-утилита удаляет мой форум в swift, я могу запустить следующий код, чтобы напечатать в консоли заголовки каждого форума topi c:

enum HTMLError: Error {
    case badInnerHTML
}
class DiscussionBoardResponse {
    init(_ innerHTML: Any?) throws {
    guard let htmlString = innerHTML as? String else { throw HTMLError.badInnerHTML }
        let doc = try SwiftSoup.parse(htmlString)
        let titles = try doc.getElementsByClass("Forum_NormalBold").array()
        var nestedLoginController: LoginController!
        for i in 0..<titles.count {
            let title = try titles[i].text()
            print(title)
            print("")
        }
    }
}

Теперь выше мне нужно назначить то, что в заголовке в массив за пределами класса. Поэтому я создал переменную (которая может быть неправильной и, возможно, в этом проблема):

var discussionTitles = [String?]()

Мой viewController называется LoginController. Теперь я попытался добавить это в DiscussionBoardResponse, чтобы назначить заголовки переменной:

class DiscussionBoardResponse {

    //let discussionTopics: [DiscussionTopicSingle]
    init(_ innerHTML: Any?) throws {
    guard let htmlString = innerHTML as? String else { throw HTMLError.badInnerHTML }
        let doc = try SwiftSoup.parse(htmlString)
        let titles = try doc.getElementsByClass("Forum_NormalBold").array()

        var nestedLoginController: LoginController!
        for i in 0..<titles.count {
            let title = try titles[i].text()
            //tried converting title into a string in case it was't
            //guard let titleString = title as? String else { return }
            nestedLoginController?.discussionTitles[i] = title
            print(nestedLoginController?.discussionTitles[i])
            print("")
        }
    }
}

Теперь, когда я печатаю nestedLoginController? .DiscussionTitles [I] Он выводит только nil для каждого заголовка. Что я делаю не так?

ОБНОВЛЕНИЕ: Я теперь немного переосмыслил, как это сделать, потому что другой способ не работает, поэтому внутри, где я нажимаю кнопку, которая приводит меня к DiscussionBoardResponse, выглядит так:

do {
    let discussionResponse = try DiscussionBoardResponse(innerLoginHTML)
    print("Got Response")
} catch{}

Я пытаюсь отправить через переменную обсуждение Заголовки

let discussionResponse = try DiscussionBoardResponse(innerLoginHTML, test: self.discussionTitles)

и в Обсуждении Ответ у меня сейчас:

init(_ innerHTML: Any?, test: [String] = []) throws {
    guard let htmlString = innerHTML as? String else { throw HTMLError.badInnerHTML }
        let doc = try SwiftSoup.parse(htmlString)
        let titles = try doc.getElementsByClass("Forum_NormalBold").array()
        //var nestedLoginDelete: [String] = []
        for i in 0..<titles.count {
            let title = try titles[i].text()
            test.append(title) 
        }
    }
}

, и теперь я получаю сообщение об ошибке: Не могу использовать мутирующий член в неизменяемом значении: «test» - это константа «let». Я не уверен, что даже если это сработало, я на самом деле манипулирую переменными DiscussionTitles или я просто манипулирую каким-то его экземпляром? В любом случае, что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...