两个方法中代表的快速问题

时间:2016-09-06 19:47:54

标签: ios swift delegates

我在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]()

}

2 个答案:

答案 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]()

viewDidLoad中的

todoitemsDelegate todoitemsDelegate secondPart是不同的对象,并且有两个不同的项变量。