在处理初始化错误时,不能在Swift结构中初始化常量

时间:2015-10-17 04:19:10

标签: 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: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的价值,我不知道为什么。

0 个答案:

没有答案