gpt4 book ai didi

ios - 无法将数组传递到 performSegueWithIdentifier

转载 作者:行者123 更新时间:2023-11-28 21:38:18 25 4
gpt4 key购买 nike

我想通过 performSegueWithIdentifier(self.segueName, sender: products) 传递类型为 [Product] 的名为 products 的数组

我想在 prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)

sender 参数中接收数组

但是,这不会编译:无法将类型“[Product]”的值转换为预期的参数类型“AnyObject?”

我为什么要这样做?仅仅是因为我想避免为此目的在我的 Controller 类中添加全局变量。

我怎样才能做到这一点?

我试图事先将数组转换为 AnyObject。此解决方案可以编译,但 prapareForSegue 函数的 sender 参数中的结果值包含 nil

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == segueName {
let productsController = segue.destinationViewController as! ProductsController
productsController.products = sender as! [Product]
}
}

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let company = DataService.allCompanies[indexPath.item]
DataService.getAllProductsForCompanies([company]) { (products: [Product]) -> () in
dispatch_async(dispatch_get_main_queue()) {
print("getAllProductsForCompanies for companyId: \(company.companyId)")
self.performSegueWithIdentifier(self.segueName, sender: products as? AnyObject)
}
}
}

最佳答案

直接来自 Swift 编程语言引用:

The as? version of the downcast operator returns an optional value of the protocol’s type, and this value is nil if the instance does not conform to that protocol.

因此,如果您获得的值为 nil,则意味着 [Product] 不符合 AnyObject? 协议(protocol),因为 [Product] 是一个数组(参见此处:Structures as AnyObject)。

你可以做的是将 [Product] 类型转换为 NSArray,因为这是一个符合 AnyObject? 的对象。

self.performSegueWithIdentifier(self.segueName, sender: (products as NSArray) as? AnyObject)

在这里查看更多信息:AnyObject to Array .

让我知道进展如何!祝你好运!

关于ios - 无法将数组传递到 performSegueWithIdentifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33086692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com