Swiftstring不符合anyobject

只是有点愚蠢的问题,多次回答,但我不明白

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

上面的原因错误:Swift的string不符合anyobject,所以用as,但是

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

完美的作品。 在声明中input什么问题

AnyObject可以表示任何types的实例。 从AnyObjectString条件AnyObject只能工作,因为如果必要的话, 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 { ... } 

但更好的解决scheme可能是

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

即在循环中使用它之前,使用可选的绑定打开枚举器。