stack0101
stack0101

Reputation: 3

Issue using NSError in a convenience init

The error said

Constant ‘err’ used before being initialized

and

Constant ‘err’ capture by a closure before initialized

Does anyone know how to fix this issue?

    public convenience init(nsurl:NSURL) {
    var enc:NSStringEncoding = NSUTF8StringEncoding
    let err:NSError?
    let str =
    String(try! NSString(
        contentsOfURL:nsurl, usedEncoding:&enc))
       //the code below got error
    if err != nil { self.init(err!) }
    else { self.init(string:str) }
}

Upvotes: 1

Views: 227

Answers (1)

Eric Aya
Eric Aya

Reputation: 70113

In your snippet, I don't see where err would be populated with an actual error message?

You create the err variable then you don't use it, so it will always be nil.

It would be better to use try inside Do-Catch.

Something like this:

public convenience init(nsurl:NSURL) {
    var enc:NSStringEncoding = NSUTF8StringEncoding
    do {
        let str = try String(contentsOfURL:nsurl, usedEncoding:&enc)
        self.init(string:str)
    } catch let error as NSError {
        self.init(string: error.localizedDescription)
    }
}

Upvotes: 1

Related Questions