我在ViewController.swift的一些方法中遇到了一个奇怪的问题。例如:
我们有ToDoItemsDelegate的ViewController类,例如:
ViewController.swift
class ViewController: UIViewController, ToDoItemsDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let todoitemsDelegate = ToDoItems(delegate: self)
print("Part 1: How many to do items?: \(todoitemsDelegate.items.count)")
secondPart()
}
func secondPart() {
let todoitemsDelegate = ToDoItems(delegate: self)
print("Part 2: How many to do items?: \(todoitemsDelegate.items.count)")
}
}
输出:
Part 1: How many to do items?: 5
Part 2: How many to do items?: 0
我不明白为什么secondPart()方法没有像第一种方法那样给出正确的数字"第一部分:5"。没有线索...如果你有一个委托在ViewController中的方法之间工作,它应该是有效的。我试图创建一个额外的委托,它的行为是一样的。知道它有什么问题吗?任何建议表示赞赏。谢谢!
已编辑(我添加了更多详情)
ToDoItems.swift
protocol ToDoItemsDelegate {
}
struct Item {
var title: String!
var description: Int!
}
class ToDoItems {
let delegate: ToDoItemsDelegate
init(delegate: ToDoItemsDelegate) {
self.delegate = delegate
}
var items = [Item]()
}
答案 0 :(得分:0)
您应该执行以下操作。 todoitemsDelegate
在函数之外声明,然后在viewDidLoad
中使用之前被赋值。现在它将两次打印相同的值(0,如预期的那样):
class ViewController: UIViewController, ToDoItemsDelegate {
var todoitemsDelegate : ToDoItems?
override func viewDidLoad() {
super.viewDidLoad()
todoitemsDelegate = ToDoItems(delegate: self)
print("Part 1: How many to do items?: \(todoitemsDelegate!.items.count)")
secondPart()
}
func secondPart() {
print("Part 2: How many to do items?: \(todoitemsDelegate!.items.count)")
}
}
答案 1 :(得分:0)
您正在创建两个不同的ToDoItems。 ToDoItems != self
每次分配新的ToDoItems时,都要初始化新项目的属性。即var items = [Item]()
todoitemsDelegate 和 todoitemsDelegate secondPart是不同的对象,并且有两个不同的项变量。