只是有点愚蠢的问题并且多次回答,但是我无法理解
while let element = enumdirs?.nextObject() as? String {
println(element)
}
以上原因导致错误:Swift字符串不符合任何对象,因此使用as,但
while let element = enumdirs?.nextObject() {
println(element as? String)
}
完美无缺。在声明
中投射的问题是什么答案 0 :(得分:4)
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)
}
}
即。使用可选的绑定在中使用它来打开枚举器 循环。