尝试在 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
当item
和itemArray
都在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"
【问题讨论】:
请提供InfoViewController
、ViewController
和Item
的完整代码。好像你已经声明了两次Item
。
看起来您有Item
类型作为ViewController
的成员。检查我的答案
【参考方案1】:
确保您没有将 Item
类型声明为视图控制器的成员。
在您的项目中全局声明Item
结构或类。
【讨论】:
这就是问题所在,只是一个放错了位置的 做到了!我是 xcode 的新手,所以我还在学习这些微小的细节。非常感谢!以上是关于尝试在 2 个控制器之间传递数据时,我收到错误无法分配类型“ViewController.Item?”的值键入“项目?”,的主要内容,如果未能解决你的问题,请参考以下文章