错误:使用ubuntu 14.04

时间:2016-04-06 02:43:45

标签: swift ubuntu-14.04

我有一个swift的问题,我不知道如何解决它,因为我只有2个月的学习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");

1 个答案:

答案 0 :(得分:2)

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

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中每个语句的末尾都不需要分号。