gpt4 book ai didi

ios - 在 Swift 中将 UITableView delegate 和 dataSource 分配给 super

转载 作者:行者123 更新时间:2023-11-30 13:54:13 25 4
gpt4 key购买 nike

我试图让一个父类(super class)填充并处理某个段的表内容。所以我想到实现:

@IBAction func changeValue(sender:AnyObject){
self.searchDisplayController?.setActive(false, animated:false)
if (selection.selectedSegmentIndex==1){
self.myTableView.delegate=super
self.myTableView.dataSource=super

} else {
self.myTableView.delegate=self
self.myTableView.dataSource=self
}
self.myTableView.reloadData()
}

但是我有一个错误。通过测试,编译器建议我使用:

    @IBAction func changeValue(sender:AnyObject){
self.searchDisplayController?.setActive(false, animated:false)
if (selection.selectedSegmentIndex==1){
self.myTableView.delegate=super.self()
self.myTableView.dataSource=super.self()

} else {
self.myTableView.delegate=self
self.myTableView.dataSource=self
}
self.myTableView.reloadData()
}

无论构造的含义是什么super.self()

然而,尽管代码通过那里没有任何问题,但该命令似乎被忽略,并且在同一个类而不是 super 类上调用委托(delegate)方法,甚至打印 super.self() 的值显示它是尽管如此,当我跳过 () 时,Xcode 会鼓励我说:

函数生成预期类型“LogsViewController”;您的意思是用“()”来调用它吗?

但是,当我添加双括号时,它返回当前类而不是顶部 LogsViewController。实现我需要的正确方法是什么?为什么 super.self() 不像宣传的那样工作?

我澄清我不能简单地调用 super 上的委托(delegate)方法,因为这将保留底层类的所有权,而顶层类上的虚拟方法将找到底层类中的方法,而不是 super 类中的方法。被需要。

这是我的代码的结构,希望它能让事情变得更清楚:底层

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete method implementation.
// Return the number of rows in the section.
let isMainTable = tableView==self.myTableView
let isFavorite = selection.selectedSegmentIndex==2
var count: Int?
count = sourceForTableKind(isMainTable, favorites:isFavorite)?.count
if (count==nil) {
return 0
}
return count!
}

顶级“虚拟类(class)”:

func sourceArray()->Array<NearElement>?{
return nil
}

func arrayOfContentsFromSearchArray(searchArray:Array<String>?, favorites:Bool)->Array<NearElement>?{
return nil
}

func sourceForTableKind(normal: Bool, favorites:Bool)->Array<NearElement>?{
// NSLog(@"source:%@ %@",favorites?@"favorites": @"near", normal?@"normal":@"searched");
print("sono \(self)")
if (normal) {
return sourceArray()
} else {
return arrayOfContentsFromSearchArray(searchResults, favorites:favorites)
}
}

sourceArray() 和 arrayOfContentsFromSearchArray() 的实现均在继承自该类的底层类及其父类(super class)中定义。

最佳答案

仅仅是因为当您分配委托(delegate)时,您正在分配实例。因此,如果调用委托(delegate)方法,它将调用对象的方法,该方法是“self”类的实例。

当您将其分配给 super 时,它会继续引用您的实例,并且无论您使用“self”还是“super”都没有关系(这是为了确认)。

你应该做什么,在委托(delegate)方法的类实现中调用 super 的实现。

关于ios - 在 Swift 中将 UITableView delegate 和 dataSource 分配给 super,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33855980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com