2016-05-12 11 views
1

Also auf einen Tastendruck Ich erstelle SplitLat: [Double] von einer Wurffunktion namens SplitLatitude, die currentLocation: CLLocationCoordinate2D ?. Ich mag dann splitLat als Label verwendet wird (sein Gehen, als auch für andere Dinge verwendet werden, aber dies dient dazu, das Beispiel)Verwendung von Variable/Konstante außerhalb von do {} catch {} - swift2

@IBAction func ButtonPress() { 
     let splitLat = try self.splitLatitude(self.currentLocation) 
     LatSplitLabel.text = "\(splitLat)" 
} 

dies einen Fehler erhält „Fehler von hier geworfen nicht behandelt werden“

ich nehme mir vor dies, indem es in einem do catch-Block

do{ 
     let splitLat = try self.splitLatitude(self.currentLocation) 
    } catch { 
     print("error") //Example - Fix 
    } 

setzen, aber das, wenn ich versuche, das Etikett später zu setzen auf splitLat eine „ungelöste Kennung“ ist

Neu bei swift ein d Programmierung im Allgemeinen, fehlt mir etwas Grundlegendes/habe ich ein falsches Verständnis? gibt es eine Möglichkeit, dass ich die Konstante aus der Do {} -Anweisung außerhalb der Do-Anweisung verwenden kann. Versuchte Rückkehr, aber das ist für Funktionen reserviert.

schätzen wirklich jede Hilfe

Dank

Antwort

2

Sie haben zwei Möglichkeiten (ich nehme an, dass splitLat ist String Typ)

do{ 
    let splitLat = try self.splitLatitude(self.currentLocation) 
    //do rest of the code here 
} catch { 
    print("error") //Example - Fix 
} 

zweite Option, predeclare die Variable

let splitLat : String? //you can late init let vars from swift 1.2 
do{ 
    splitLat = try self.splitLatitude(self.currentLocation) 
} catch { 
    print("error") //Example - Fix 
} 
//Here splitLat is recognized 

Jetzt, einige Erklärung Ihres Profis bluten. in Swift (und vielen anderen Sprachen) wird Variablen nur innerhalb des Umfangs sich

Umfang zwischen diesen Klammern {/* scope code */ }

{ 
    var x : Int 

    { 
     //Here x is defined, it is inside the parent scope 
     var y : Int 
    } 
    //Here Y is not defined, it is outside it's scope 
} 
//here X is outside the scope, undefined 
+0

Thank you! hätte das herausfinden können. Hatte Option 1, aber es würde nicht für meine Zwecke funktionieren, aber Option 2 ist perfekt. Vielen Dank! –

0

Dies ist ein Scoping-Fehler, wenn Sie die Ausführung erfolgreich sein wollen, nachdem die definiert ist definiert sind definiert tun/fangen Block. Sie müssen die Variable außerhalb dieses Do/Catch-Bereichs deklarieren, um sie nach der Do/Catch-Ausführung zu verwenden.

Try this:

var splitLat: <initialType> = <initialValue> 
do { 
    let splitLat = try self.splitLatitude(self.currentLocation) 
} catch { 
    print("error") 
} 

print(splitLat) 

Hier ist ein zusammengebraut Beispiel, das in einem Swift 2.2 Spielplatz läuft:

enum Errors: ErrorType { 
    case SomeBadError 
} 

func getResult(param: String) throws -> Bool { 
    if param == "" { 
     throw Errors.SomeBadError 
    } 
    return true 
} 

var result = false 
do { 
    result = try getResult("it") 
} catch { 
    print("Some error") 
} 

print(result) 
Verwandte Themen