Ошибка «Константа« self.apiKey », используемая до инициализации» в Initializer - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть класс YoutubeAPIClient:

import Foundation

class YoutubeAPIClient {
    let apiKey: String?

    init?() {
        do {
            apiKey = try Environment().getValue(for: "YOUTUBE_API_KEY") as? String
        } catch {
            //TODO: Implement error handling
            print(error)
        }
    }
}

В методе init я пытаюсь инициализировать apiKey, но он говорит:

Constant 'self.apiKey' used before being initialized

Если это поможет, я включил структуру «Код для среды»:

import Foundation

struct Environment {

    func getValue(for key: String) throws -> Any {

        guard let value = ProcessInfo.processInfo.environment[key] else {
            throw GenericError.noValueForKeyInEnvironment
        }

        return value
    }
}

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Вы определили apiKey как необязательный, поэтому он не может быть нулевым во время инициализации, измените его на var с let, и он должен работать. Либо верните nil из блока catch для обработки ошибки.

class YoutubeAPIClient {
    var apiKey: String?

    init?() {
        do {
            self.apiKey = try Environment().getValue(for: "YOUTUBE_API_KEY") as? String
        } catch {
            //TODO: Implement error handling
            print(error)
            fatalError(error.localizedDescription)
        }
    }
}
0 голосов
/ 29 апреля 2018

Вы должны обработать ошибку, иначе экземпляр завершится в неопределенном состоянии (apiKey неинициализирован в случае ошибки).

Так как ваш init уже неисправен, вы можете просто вернуть nil:

} catch {
    print(error)
    return nil
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...