Ios 两种方法中的Swift问题
在ViewController.swift中的一些方法中,我对同一个委托有一个奇怪的问题。例如: 我们有一个带有ToDoItemsDelegate的ViewController类,如下所示: ViewController.swiftIos 两种方法中的Swift问题,ios,swift,delegates,Ios,Swift,Delegates,在ViewController.swift中的一些方法中,我对同一个委托有一个奇怪的问题。例如: 我们有一个带有ToDoItemsDelegate的ViewController类,如下所示: ViewController.swift class ViewController: UIViewController, ToDoItemsDelegate { override func viewDidLoad() { super.viewDidLoad()
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]()
视图中的todoitemsDelegate和todoitemsDelegate第二部分是不同的对象,有两个不同的项变量
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