Swift 无法将NSSingleObjectArray类型的值强制转换为NSMutableArray
自iOS10以来,我面临着这个问题: 无法将类型为“\uu NSSingleObjectArrayI”的值强制转换为 “NSMutableArray” 这是我的代码:Swift 无法将NSSingleObjectArray类型的值强制转换为NSMutableArray,swift,ios10,Swift,Ios10,自iOS10以来,我面临着这个问题: 无法将类型为“\uu NSSingleObjectArrayI”的值强制转换为 “NSMutableArray” 这是我的代码: manage.POST( url, parameters: params, constructingBodyWithBlock: { (data: AFMultipartFormData!) in //Some stuff here
manage.POST( url, parameters: params,
constructingBodyWithBlock: { (data: AFMultipartFormData!) in
//Some stuff here
},
success: { (operation: NSURLSessionDataTask?, responseObject: AnyObject?) in
var array : NSMutableArray!
if AppConfig.sharedInstance().OCR == "2"{
let dictionnary = responseObject as! NSDictionary
array = dictionnary["data"]! as! NSMutableArray
}else{
//!!!!CRASH HERE!!!!!
array = responseObject as! NSMutableArray
}
//Some stuff after
}
当我查找responseObject值时,我的控制台中有:
Printing description of responseObject:
▿ Optional<AnyObject>
▿ Some : 1 elements
- [0] : Test
打印响应对象的说明:
▿ 可选的
▿ 一些:1个要素
-[0]:测试
如何从responseObject中提取值“Test”
非常感谢发生崩溃是因为您假设接收的对象是
NSMutableArray
,即使该对象是在代码之外创建的
在本例中,代码获取的数组是为处理单个元素而优化的数组的实例;这就是演员阵容失败的原因
发生这种情况时,可以创建对象的可变副本:
array = (dictionnary["data"]! as! NSArray).mutableCopy() as! NSMutableArray
及
当我们处理来自web服务器的响应时,我们不能确定对象和类型。因此,最好根据需要检查和使用对象。请参阅以获取与您的问题相关的参考资料
if let dictionnary : NSDictionary = responseObject as? NSDictionary {
if let newArr : NSArray = dictionnary.objectForKey("data") as? NSArray {
yourArray = NSMutableArray(array: newArr)
}
}
通过这种方式,你的应用程序将永远不会崩溃,因为它对于你需要的对象来说是完全有条件的,需要检查类型。如果您的“数据”键是数组,那么只有它才能为您的数组继续。谢谢。一如既往,不要在SWIFT中使用可变基础集合类型。弊大于利。
if let dictionnary : NSDictionary = responseObject as? NSDictionary {
if let newArr : NSArray = dictionnary.objectForKey("data") as? NSArray {
yourArray = NSMutableArray(array: newArr)
}
}