错误"常数' self.apiKey'在初始化之前使用"在初始化程序中

时间:2018-04-29 15:16:29

标签: ios swift class environment-variables

我有一个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 :(得分:1)

您必须处理错误,否则实例将以未定义状态结束(apiKey在发生错误时未初始化)。

由于您的init已经可以使用,因此您只需返回nil

} catch {
    print(error)
    return nil
}

答案 1 :(得分:0)

您已将apiKey定义为可选,因此在初始化时它不能为零,将其从let更改为var并且它应该可行。或者从catch块返回nil来处理错误。

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)
        }
    }
}