我有一个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
}
}
答案 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)
}
}
}