Быстрая строка не соответствует ни одному объекту

Просто немного глупый вопрос и отвечал много раз, но тем не менее я не могу понять

    while let element = enumdirs?.nextObject() as? String {
        println(element)
    }

Вышеуказанное приводит к ошибке: Строка Swift не соответствует ни одному объекту, так как, но

    while let element = enumdirs?.nextObject() {
        println(element as? String)
    }

работает отлично. В чем проблема с приведением в то время как заявление

1 ответ

Решение

AnyObject может представлять экземпляр любого типа класса. Условный актерский состав отAnyObject в String работает только потому что String соединен с NSString если необходимо.

Тем не менее, это, кажется, не работает с необязательной цепочкой в

while let element = enumdirs?.nextObject() as? String { ... }

так что это может быть ошибка компилятора. Это работает, как и ожидалось, если вы приведете к NSString вместо:

while let element : String = enumdirs?.nextObject() as? NSString { ... }

или разверните явно:

while let element = enumdirs!.nextObject() as? String { ... }

Но лучшее решение может быть

if let enumdirs = NSFileManager.defaultManager().enumeratorAtPath(...) {
    while let element = enumdirs.nextObject() as? String {
        println(element)
    }
}

т.е. разверните перечислитель с необязательной привязкой перед использованием его в цикле.

Другие вопросы по тегам