我正在将NSArray转换为NSIndexPath,以便我可以在我的reloadRowsAtIndexPath中使用它,任何人都可以提出更好的解决方案,为什么我会收到警告"从NSArray强制转换为不相关的类型NSIndexPath总是失败",我必须担心这一点吗?
法典
let indexArray : NSIndexPath? = NSArray(Objects:NSIndexPAth(forRow: 0, inSection:2)) as? NSIndexPath
self.myTableView.reloadRowsAtIndexPaths(indexArray!], withRowAnimation:UITableViewRowAnimation.None)
你肯定要担心这一点,特别是因为你在下一行强制解开它(用!
)。该警告告诉您,您正在向NSIndexPath
投NSArray
,并且您不能这样做。换句话说,indexArray
将永远nil
.而且由于您在下一行强制解开包装,因此它总是会崩溃。
遇到麻烦的原因是,您根本不需要强制转换为NSIndexPath
:reloadRowsAtIndexPaths()
需要一个索引路径数组,这就是您所做的,尽管您可以更轻松地使用它。以下是重写代码的简单方法:
let indexPath = NSIndexPath(forRow: 0, inSection:2)
self.myTableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
[indexPath]
的意思是"包含indexPath
的数组",因此可以轻松创建reloadRowsAtIndexPaths()
正在寻找的数组。如您所见,不需要铸造。
请注意,您应该尽可能使用if let
和其他安全的解包方法——Swift 的初学者应该假装 !
的意思是"请立即崩溃"。 :)