簡體   English   中英

無法將數組傳遞給performSegueWithIdentifier

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM