斯威夫特串不符合anyobject

问题描述:

只是有点愚蠢的问题,并回答了很多次,但我仍然无法理解斯威夫特串不符合anyobject

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

上述原因的错误:斯威夫特字符串不符合anyobject,所以as,但是

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

完美地工作。什么问题在铸造,而陈述

AnyObject可以代表任何类型的实例。从 AnyObjectString的有条件转换仅适用,因为如有必要,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) 
    } 
} 

即展开一个可选的绑定枚举之前使用它在 循环中。