Ios 两种方法中的Swift问题

Ios 两种方法中的Swift问题,ios,swift,delegates,Ios,Swift,Delegates,在ViewController.swift中的一些方法中,我对同一个委托有一个奇怪的问题。例如: 我们有一个带有ToDoItemsDelegate的ViewController类,如下所示: ViewController.swift class ViewController: UIViewController, ToDoItemsDelegate { override func viewDidLoad() { super.viewDidLoad()

在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)")
     }
}
protocol ToDoItemsDelegate {

}

struct Item {

     var title: String!
     var description: Int!

}

class ToDoItems {

     let delegate: ToDoItemsDelegate

     init(delegate: ToDoItemsDelegate) {
          self.delegate = delegate
     }

     var items = [Item]()

}
输出:

Part 1: How many to do items?:   5
Part 2: How many to do items?:   0
我不明白为什么secondPart()方法没有像第一个方法“FirstPart:5”那样给出正确的数字。没有线索。。。如果您有一个委托在ViewController中的方法之间工作,那么它应该是工作的。我试图创建一个额外的委托,但它的行为是相同的。你知道有什么问题吗?如有任何建议,我们将不胜感激。谢谢

编辑(我添加了更多细节)

ToDoItems.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)")
     }
}
protocol ToDoItemsDelegate {

}

struct Item {

     var title: String!
     var description: Int!

}

class ToDoItems {

     let delegate: ToDoItemsDelegate

     init(delegate: ToDoItemsDelegate) {
          self.delegate = delegate
     }

     var items = [Item]()

}

您应该执行以下操作
todoitemsDelegate
在函数外部声明,然后在使用前在
viewDidLoad
中赋值。现在,它将两次打印相同的值(0,如预期的那样):


您正在创建两个不同的ToDoItem<代码>待办事项!=自我

每次分配新的ToDoItems时,您都在初始化新项的属性。i、 e.
var项目=[Item]()


视图中的todoitemsDelegatetodoitemsDelegate第二部分是不同的对象,有两个不同的项变量

secondPart
中的print语句没有引用您在该函数中创建的实例,您当前的代码似乎甚至不应该编译。您试图通过委托完成的任务一点也不清楚。@picciano不明白为什么我的
secondPart
方法只有0项,而不是像secondPart()中的
第一个方法
,您正在引用
todoitemsDelegate
,但它似乎是viewDiLoad函数中的一个局部变量,不应在此处访问。@picciano Ok。让它工作的最好方法是什么?有什么例子吗?我试过了,但由于错误,它没有给出正确的答案。当我把它移到函数之外时。这就是我遇到的错误:
Arguement type'NSObject->()->ViewController不符合预期的类型ToDoItemsDelegate'
知道它有什么问题吗?如果我知道您的委托是什么,那会有所帮助。你的问题不清楚。我有
ToDoItems
类和Struct和其他func方法。如果我不使用委托在ToDoItems类和UIViewController之间传递值。我没有任何数据。所以我在ToDoItems中添加了协议,这样我就可以从那里获取数据并传递到UIViewController。它只在
viewDidLoad()
方法中起作用,但在
secondPart()方法中不起作用。你太模糊了。你不能像在属性声明中那样引用
self