2016-04-05 41 views
0

說實話我在SWIFT一個noob,但我有一個項目做這種語言,所以,這裏是代碼:使用未解決的標識符與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(" "); 
} 

,這是錯誤:

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

您只能使用內archivedTokens如果讓語句的{}。您可以將其替換爲警衛或將需要訪問的代碼放入其範圍內。 –

+0

好的,我只是修改代碼以避免這種情況,現在我得到這個消息:錯誤:不能強制展開非可選類型'String'的值var lineasArchivoTokens:[String] = archivoTokens!.componentsSeparatedByString(「\ n」 ); –

回答

0

正如@thefredelement說,你不能使用archivoTokensif let archivoTokens = ... { ... }塊之外。

您可以迴流您這樣的代碼:

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") 
} 

或者,在一個更自然的方式,使用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

哇,它的工作,謝謝,一個非常好的解釋:D –

相關問題