Can';在处理初始化错误时,不能在Swift结构中初始化常量
这个标题是不言自明的。代码如下:Can';在处理初始化错误时,不能在Swift结构中初始化常量,swift,swift2,Swift,Swift2,这个标题是不言自明的。代码如下: 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:Strin
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)") }
}
}
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 } }
但是,我仍然收到一个错误,说闭包“setRegion()”正在捕获api键的值,我不知道为什么。我认为您粘贴的代码不正确,因为您的初始值设定项中有一个函数声明。我猜这是因为您的赋值不直接在init()中,关于分配给常量的常规规则不适用。但是init()不是一个闭包吗?据我所知,我可以将一个闭包嵌套在另一个闭包中。如果我错了,请纠正我!那么,我需要在init中设置常量?不在任何其他类型的方法/附件中?仅编辑。如果我在处理区域类型之前声明了apiKey的值,那么代码的编译似乎没有问题。然而,我仍然不确定为什么会发生这种情况,最重要的是:首先设置apiKey的值是一个好主意,还是一种糟糕的编码实践?