Быстрая строка не соответствует ни одному объекту
Просто немного глупый вопрос и отвечал много раз, но тем не менее я не могу понять
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)
}
}
т.е. разверните перечислитель с необязательной привязкой перед использованием его в цикле.