尝试在 2 个控制器之间传递数据时,我收到错误无法分配类型“ViewController.Item?”的值键入“项目?”,

Posted

技术标签:

【中文标题】尝试在 2 个控制器之间传递数据时,我收到错误无法分配类型“ViewController.Item?”的值键入“项目?”,【英文标题】:when trying to pass data between 2 controllers, I get the error cannot assign value of type 'ViewController.Item?' to type 'Item?', 【发布时间】:2019-10-06 11:36:14 【问题描述】:

当使用 segue 时,我试图将信息传递给另一个控制器使用

(取自 ViewController)

var itemArray: [Item] = []

在我的第二个视图控制器 (InfoViewController) 上

var item: Item?

这是我的继续

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 

    if segue.identifier == "showDetail" 
        let InfoController = segue.destination as! InfoViewController
        InfoController.item = sender as? Item

itemitemArray 都在Item 类中时,为什么我会收到错误消息。如何使它们都是相同的数据类型才能将数据传输到 InfoViewController

InfoViewController 的完整代码:

class InfoViewController: UIViewController 

var item: Item?


override func viewDidLoad() 
    super.viewDidLoad()

    // Do any additional setup after loading the view.

公共类项目 让名称:字符串 让图像:字符串

init(name: String, image: String) 
    self.name = name
    self.image = image


ViewController 太长(150 行,所以我省略了搜索功能和搜索范围代码。

  @IBOutlet var tableView: UITableView!
@IBOutlet var searchBar: UISearchBar!

var itemArray: [Item] = []
var currentItemArray: [Item] = []


override func viewDidLoad() 
    super.viewDidLoad()
    setUpItems()
    setUpSearchBar()
    self.searchBar.showsScopeBar = true
    searchBar.placeholder = "Search Item by Name"



private func setUpItems() 
    itemArray.append(Item(name: "Plastic Bottles", category: .Plastic, image: "1"))
    itemArray.append(Item(name: "Cans", category: .Metal, image: "2"))

    currentItemArray = itemArray



private func setUpSearchBar() 
    searchBar.delegate = self



func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return currentItemArray.count


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? TableViewCell
    else 
        return UITableViewCell()
    

    cell.nameLabel.text = currentItemArray[indexPath.row].name
    cell.imgView.image = UIImage(named:currentItemArray[indexPath.row].image)

    return cell


func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
    return 100


override func prepare(for segue: UIStoryboardSegue, sender: Any?) 

    if segue.identifier == "showDetail" 
        let InfoController = segue.destination as! InfoViewController
        InfoController.item = sender as? Item
    



func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    let item = itemArray[indexPath.row]
    performSegue(withIdentifier: "showDetail", sender: item)


public class Item 
let name: String
let image: String
let category: ItemType

init(name: String, category: ItemType, image: String) 
    self.name = name
    self.image = image
    self.category = category

enum ItemType: String 
    case Plastic = "Plastic"
    case Metal = "Metal"
    case Paper = "Paper"

【问题讨论】:

请提供InfoViewControllerViewControllerItem 的完整代码。好像你已经声明了两次Item 看起来您有Item 类型作为ViewController 的成员。检查我的答案 【参考方案1】:

确保您没有将 Item 类型声明为视图控制器的成员。

在您的项目中全局声明Item 结构或类。

【讨论】:

这就是问题所在,只是一个放错了位置的 做到了!我是 xcode 的新手,所以我还在学习这些微小的细节。非常感谢!

以上是关于尝试在 2 个控制器之间传递数据时,我收到错误无法分配类型“ViewController.Item?”的值键入“项目?”,的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试传递链表的头指针时,我不断收到错误消息

无法在第二个视图控制器中更新我的 UIImage

无法让文本显示在标签中。我可以在控制台中看到文本,但是我收到一条错误,上面写着Nil

接收错误 #1452 - 无法添加或更新子行”

在视图控制器之间传递多个标签时遇到问题

收到错误的`Type'{theme:Theme; }'在尝试将其作为道具传递给App组件时无法分配给类型`