错误:在 Ubuntu 14.04 中对 Swift2 中成员'subscript'的引用不明确



我对swift有一个问题,我不知道如何解决它,因为我只有两个月的时间学习swift,我正在逐渐学习,我相信这是NSRegularExpression的问题,所以下面是代码:

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

这只是一条不幸的错误消息。以下是您需要更改的行:

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

在Swift中,不能只为这些选项参数传入nil,因为它们不是可选的。顺便说一下,在Swift中,您不需要在每条语句的末尾使用分号。

最新更新