2016-04-06 34 views
0

ile swift2 üye 'subscript' belirsiz referans hızlı ile bir sorunum var ve bunu çözmek için bilmiyorum çünkü sadece 2 ay çalışma okuyor ve yavaş yavaş öğreniyorum, inanıyorum bu kadar burada NSRegularExpression ile bir şeydir kod şudur:hata: ubuntu 14.04

import Foundation 

var dir = "/home/guillermo/Escritorio/"; 
var archivo = "tokens"; 
var ruta = dir.stringByAppendingPathComponent(archivo); 

guard var archivoTokens = try? String(contentsOfFile: ruta, encoding: NSUTF8StringEncoding) else { 
    // la condicion guard requiere una salida cuando la condicion no se satisface 
    //Tambien puedes usar `return` si esta dentro de la funcion 
    fatalError("fallo al leer archivoTokens desde el archivo") 
} 

// ahora archivoTokens es un NSString normal no-nulo 

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

var TOKENS:[String] = [String](); 
var PATRONES:[String] = [String](); 
var NOMBRES:[String] = [String](); 
var LEXEMAS:[String] = [String]() 

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

//print(NOMBRES) 

archivo = "codigo"; 
ruta = dir.stringByAppendingPathComponent(archivo); 

guard var archivoCodigoFuente = try? String(contentsOfFile: ruta, encoding: NSUTF8StringEncoding) else { 
    fatalError("falla al leer archivoCodigoFuente desde el archivo") 
} 
var lineasArchivoCodigoFuente:[String] = archivoCodigoFuente.componentsSeparatedByString("\n"); 

count = lineasArchivoCodigoFuente.count-1; 
for index in 0..<count{ 
    if lineasArchivoCodigoFuente[index] != "" { 
     let tmpList:[String] = (lineasArchivoCodigoFuente[index]).componentsSeparatedByString(""); 

     for word in tmpList { 
      if word != "" { 
       LEXEMAS.append(word); 
      } 
     } 
    } 
} 

for item in lineasArchivoTokens{ 
    print("Patrones| " + " Nombres|") 

    print(item) 
} 



var countL = LEXEMAS.count-1; 
var countP = PATRONES.count-1; 

var patternIndex:Int = -1; 

for indexL in 0..<countL { 
    var input:NSString = NSString(string: LEXEMAS[indexL]); 
    var range:NSRange = NSMakeRange(0, input.length) 
    TOKENS.append("no existe"); 

    for indexP in 0..<countP { 
     //error: ambiguous reference to member 'subscript' 
     var regex = NSRegularExpression(pattern: PATRONES[indexP], options: nil, error: nil); 
     var matches = regex!.matchesInString(LEXEMAS[indexL], options: nil, range: range) 

     if matches.count > 0 { 
      TOKENS[indexL] = NOMBRES[indexP]; 
      print(NOMBRES[indexP] + " " + (input as String) + "\n"); 
      break; 
     } 
    } 
} 

ve bu hatadır:

:72:50: error: ambiguous reference to member 'subscript' 
     var regex = NSRegularExpression(pattern: PATRONES[indexP], options: nil, error: nil); 
               ^~~~~~~~ 
Swift.Array:96:12: note: found this candidate 
    public subscript (index: Int) -> Element { get set } 
     ^
Swift.Array:100:12: note: found this candidate 
    public subscript (subRange: Range<Int>) -> ArraySlice<Element> { get set } 
     ^
Swift.MutableCollectionType:3:12: note: found this candidate 
    public subscript (bounds: Range<Self.Index>) -> MutableSlice<Self> { get set } 
     ^
Swift.CollectionType:2:12: note: found this candidate 
    public subscript (bounds: Range<Self.Index>) -> Slice<Self> { get } 
     ^
/home/guillermo/lexico7/Sources/main.swift:77:46: error: cannot convert value of type 'NSString' to type 'String' in coercion 
      print(NOMBRES[indexP] + " " + (input as String) + "\n"); 

cevap

2

sadece talihsiz bir hata mesajıdır. bunlar isteğe bağlı olmadıklarından

var regex = try? NSRegularExpression(pattern: PATRONES[indexP], options: NSRegularExpressionOptions(rawValue: 0)) 
var matches = regex!.matchesInString(LEXEMAS[indexL], options: NSMatchingOptions(rawValue: 0), range: range) 

Swift ise sadece, bu seçenekler parametreler için nil içinde geçemez: Burada değiştirmeniz gerekir çizgilerdir. Bu arada, Swift'deki her ifadenin sonunda noktalı virgüllere ihtiyacınız yok.

+0

Teşekkürler, bunun nil değeriyle bir şey olduğunu düşündüm, ve bildiğim kadarıyla noktalı virgül kullanmıyorum, ve ne noktalı virgül kullanmamayı biliyordum, ama çıkarmayı unuttum: D –

İlgili konular