【发布时间】:2017-10-23 01:43:47
【问题描述】:
情况就是这样:假设我得到一个变量作为 AnyObject 或 Any。然后,我必须强制转换变量以了解它是否是包含特定类型对象的数组。
func myFuction(receivedObject: AnyObject) {
if let validDogs = receivedObject as? [Dog] {
print("Received object is an array of dogs")
// Do something with valid dogs
}
if let validCats = receivedObject as? [Cat] {
print("Received object is an array of cats")
// Do something with valid cats
}
}
如果接收到的对象不是空数组(不是 nil),则此代码有效,但如果接收到的对象是空数组,则失败,因为我的日志打印了这两条消息:
"Received object is an array of dogs"
"Received object is an array of cats"
这表明对于空数组,强制转换失败。那么,有没有办法解决这个问题?
【问题讨论】:
-
我看不出如何将任何东西的数组作为
AnyObject传递,因为数组是一个结构,而不是一个类。当然,除非它是NSArray。告诉我们你怎么称呼它。 -
嗨@Grimxn。见:
self.myFucntion(receivedObject: object as! AnyObject) -
好的,但是如果你不强制它,你就不能传入,比如
[Cat()]——它不会编译。 -
嗯,这里正在编译。我正在使用 Xcode 8.3.3
-
要清楚,我的意思是你不能打电话给
myFuction(receivedObject: [Cat()])——至少在Xcode 9.1中不能......你可以打电话给myFuction(receivedObject: [Cat()] as! AnyObject)