我正在尝试一些非常简单的事情(至少在 ObjC 中)。
我想遍历一个集合 - 让我们说一个字符串和子数组的数组,打印所有字符串并递归调用函数来遍历任何子数组。
我试过这样的事情:
func traverseCollection<T : Sequence>(collection: T)
{
var generator = collection.generate()
while let item = generator.next()
{
if let collectionItem = item as? Collection
{
traverseCollection(collectionItem)
}
else
{
println("item:", item)
}
}
}
但是我尝试向下转换项目时遇到错误:
如果让collectionItem = item as,不能从'T.GeneratorType.Element'向下转换为非@objc协议类型'Collection'?收藏
不太通用的变体也因编译错误而失败:
func traverseArray(array: Array<Any>)
{
for item : Any in array
{
if let collectionItem = item as? Array<Any>
{
traverseArray(collectionItem)
}
else
{
println("item:", item)
}
}
}
那一个要么使操场崩溃,要么无法编译:
Instruction does not dominate all uses!
%10 = bitcast %swift.opaque* %9 to %Sq.20*, !dbg !235
%3 = ptrtoint %Sq.20* %10 to i32, !dbg !232
Instruction does not dominate all uses!
%T = load %swift.type** %3, align 4
%4 = bitcast %swift.type* %T to i8*, !dbg !232
LLVM ERROR: Broken function found, compilation aborted!
我想我正在尝试解决错误的方法,但我无法弄清楚如何在 Swift 中解决这个问题。如果有人能指出我正确的方向,那就太好了。