2016-04-05 3 views
0

ehrlich bin ich ein noob in schnellen, aber ich habe ein Projekt mit dieser Sprache zu tun, also, hier ist der Code:Verwendung von ungelöster Kennung in swift mit ubuntu 14.04

import Foundation 

//let dirs = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) as? [String]; 
//let dir = dirs![0]; 
var dir = "/home/guillermo/Escritorio/"; 
var file = "tokens"; 
var path = dir.stringByAppendingPathComponent(file); 
if let archivoTokens = try? NSString(contentsOfFile: path as String, encoding: NSUTF8StringEncoding){ 
    print(archivoTokens) 
    } 
var lineasArchivoTokens:[String] = archivoTokens!.componentsSeparatedByString("\n"); 

var TOKENS:[String] = [String](); 

var count = lineasArchivoTokens.count; 
for index in 0..<count{ 
    var tmpList:[String] = (lineasArchivoTokens[index]).componentsSeparatedByString(" "); 
} 

und dies ist der Fehler :

error: use of unresolved identifier 'archivoTokens' 
var lineasArchivoTokens = archivoTokens!.componentsSeparatedByString("\n"); 
+1

Sie nur archivedTokens innerhalb der if lassen Aussage des verwenden können {}. Sie können es durch einen Wächter ersetzen oder den Code, der darauf zugreifen muss, innerhalb seines Gültigkeitsbereichs platzieren. –

+0

ok, ich ändere nur den Code, um die Bedingung zu vermeiden, und jetzt bekomme ich diese Meldung: error: kann nicht erzwingen Wert von nicht-optionalen Typ 'String' var lineasArchivoTokens: [String] = archivoTokens! ComponentsSeparatedByString ("\ n"); –

Antwort

0

Wie gesagt @thefredelement, Sie nicht archivoTokens außerhalb des if let archivoTokens = ... { ... } Block verwenden können.

Sie können Ihren Code wie folgt Reflow:

if let archivoTokens = try? NSString(contentsOfFile: path as String, encoding: NSUTF8StringEncoding){ 
    // note that archivoTokens here is not an Optional because it is garenteed not to be nil 
    // so the ! suffix is not needed 
    print(archivoTokens) 
    var lineasArchivoTokens:[String] = archivoTokens.componentsSeparatedByString("\n") 
} 

Oder auf eine natürlichere Weise verwenden guard:

guard let archivoTokens = try? NSString(contentsOfFile: path as String, encoding: NSUTF8StringEncoding) else { 
    // guard statement requires exit when condition not satisfied 
    // you can also use `return` if it's inside a function 
    fatalError("failed to read archivoTokens from file") 
} 

// now archivoTokens is a normal non-nil NSString 

var lineasArchivoTokens:[String] = archivoTokens.componentsSeparatedByString("\n"); 

var TOKENS:[String] = [String](); 

var count = lineasArchivoTokens.count; 
for index in 0..<count{ 
    var tmpList:[String] = (lineasArchivoTokens[index]).componentsSeparatedByString(" "); 
} 
+0

wow, es hat funktioniert, danke, eine sehr gute Erklärung: D –