2016-04-06 11 views
0

私はすぐに問題があり、2ヶ月しか短期間で勉強していないので解決方法がわかりません。ので、ここでNSRegularExpressionで何かあるコードです:エラー:ubuntuでswift2のメンバー 'subscript'へのあいまいな参照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; 
     } 
    } 
} 

、これは誤りです:

: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"); 

答えて

2

それはちょうど不幸なエラーメッセージです。ここでは、変更する必要がある行は、次のとおりです。

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

彼らはオプションではありませんので、あなただけの、これらのオプションパラメータのnilに渡すことはできません。ちなみに、Swiftの各ステートメントの最後にセミコロンは必要ありません。

+0

ありがとう、私はそれが無価値のものだとも思っていましたが、セミコロンを使わないことを本当に知っていて、セミコロンを使わないことを知っていましたが、 –

関連する問題