![](/img/trans.png)
[英]Cannot call performSegueWithIdentifier from a UITableViewCell
[英]Cannot pass array into performSegueWithIdentifier
我想通過performSegueWithIdentifier(self.segueName, sender: products)
傳遞一個名為[Product]類型的產品的數組
我想在prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
的sender
參數中接收數組。
但是,這不能編譯: Cannot convert value of type '[Product]' to expected argument type '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編程語言參考中:
作為? 向下運算符的版本返回協議類型的可選值,如果實例不符合該協議,則該值為nil。
因此,如果您獲得的值為nil,則表示[Product]
不符合AnyObject?
由於[Product]
是一個數組,因此可以預期使用此協議(請參見此處: 結構為AnyObject )。
您可以做的是將[Product]
類型轉換為NSArray,因為那是一個符合AnyObject?的對象。
self.performSegueWithIdentifier(self.segueName, sender: (products as NSArray) as? AnyObject)
在這里查看更多: AnyObject到Array 。
讓我知道事情的后續! 祝好運!
真正的問題是我已將我的Product實體聲明為結構而不是類。 這阻止了將數組作為AnyObject處理。
使用類使我可以將[Product]
傳遞給performSegueWithIdentifier
而無需進行任何類型強制轉換,並且使用sender as! [Product]
成功地再次強制返回接收到的參數sender as! [Product]
sender as! [Product]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.