斯威夫特串不符合anyobject
问题描述:
只是有点愚蠢的问题,并回答了很多次,但我仍然无法理解斯威夫特串不符合anyobject
while let element = enumdirs?.nextObject() as? String {
println(element)
}
上述原因的错误:斯威夫特字符串不符合anyobject,所以as,但是
while let element = enumdirs?.nextObject() {
println(element as? String)
}
完美地工作。什么问题在铸造,而陈述
答
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)
}
}
即展开一个可选的绑定枚举之前使用它在 循环中。