是否有"安全"写这个可以防止运行时错误的方法吗?
for posts in resultsArray as! [AnyObject] {
//do stuff
}
我觉得if-let或guard声明会在这里起作用,我不知道如何使用for-in循环来完成这项工作。
答案 0 :(得分:2)
as
用于向上转换和类型转换为桥接类型as?
用于安全投射,如果失败则返回nil as!
用于强制施放,如果失败则崩溃安全向下转发
for posts in resultsArray as? [AnyObject] {
//do stuff
}
posts
将是AnyObject类型的变量吗?如果基础类型不是它将会无害地分配nil
。
不安全的向下转发
for posts in resultsArray as! [AnyObject] {
//do stuff
}
这也会导致帖子的类型为AnyObject?但如果基础类型是其他类型,它将crash
。
答案 1 :(得分:1)
您可以使用as?
在for-in-loop中进行转换。
for result in resultsArray {
if let post = result as? AnyObject {
//do stuff
} else {
//do other stuff
}
}
通过这种方式,您可以选择在演员表失败时会发生什么。
答案 2 :(得分:0)
为什么要将resultsArray
投射到[AnyObject]
?将它投射到正确的类型不是更好吗?
所以给出
class Post { }
let resultsArray: Any = [Post(), Post()]
你可以写这个
func doSomething(resultsArray: Any) {
guard let posts = resultsArray as? [Post] else { return }
for post in posts {
print(post)
}
}