标题非常自我解释。这是代码:
struct APIConnection {
enum APIConnectionError: ErrorType {
case InvalidRegion(invalidRegion:String)
}
let validRegions:Set<String> = ["na","eune","euw","kr","lan","las","br","oce","ru"]
let apiKey:String, region:String
var url:NSURL!
init(region:String,apiKey:String) {
func setRegion() throws {
if self.validRegions.contains(region) { self.region = region } // Can't assing since region is a let constant
else { throw APIConnectionError.InvalidRegion(invalidRegion: region) }
}
do { try setRegion() } /* If I change region to a var, compiler says setRegion() utilizes a yet non-initialized
apiKey constant. */
catch APIConnectionError.InvalidRegion(let invalidRegion) { print("Invalid region: \(invalidRegion)") }
catch let unknownError { print("Unknown error: \(unknownError)") }
}
}
我无法正确完成初始化程序,因为它不会将self.region分配给setRegion函数内的初始化程序区域常量。
apiKey也给我一个奇怪的错误:当我执行setRegion函数时,它显然被复制了,因为它还没有被初始化,所以不允许后者被执行;虽然我在代码中的任何地方都没有使用它。
编辑:重写了这部分代码:
func isRegionValid(region:String) throws -> Bool{
if self.validRegions.contains(region) { return true } // Can't assing since region is a let constant
else { throw APIConnectionError.InvalidRegion(invalidRegion: region) }
}
do { if try isRegionValid(region) { self.region = region } }
但是,我仍然收到一个错误,说关闭&#39; setRegion()&#39;正在捕捉api-key的价值,我不知道为什么。