ios - 如何更改子类上的变量数据类型

标签 ios swift xcode subclass

我正在对 UITableView 进行子类化,我想更改其中一个变量以适合我的协议(protocol)委托(delegate)。

@objc protocol SomeTableViewDelegate: class, UITableViewDelegate {
    /** 
     some documentation here
     */
    optional func didChangeValue(someTableView: SomeTableViewDelegate)

    /** 
     some documentation here
     */
    optional func someDelegateFunction(someTableView: SomeTableViewDelegate)
}

class SomeTableView: UITableView {

    override weak var delegate: SomeTableViewDelegate? // basically this is what I want to do

    var someProperty: Int = 0
}

我想向 UITableViewDelegate 添加一些实现,但作为另一个协议(protocol)而不是 UITableViewDelegate,因为我在 SomeTableView 上添加了一些其他属性,例如 someProperty

是的,我知道我可以做这样的事情

@objc protocol SomeTableViewDelegate: class {
    ... some functions here
}

class SomeTableView: UITableView {

    override weak var stDelegate: SomeTableViewDelegate?

}

这在某种程度上是可能的吗?

最佳答案

我不认为你可以直接覆盖它。但是,您可以做的是创建一个类型为 SomeTableViewDelegate 的附加属性,但当然要使用不同的名称。该属性可以充当托儿并改为设置委托(delegate)属性。像这样的东西:

weak var myTableViewDelegate: SomeTableViewDelegate? {
    get { return self.delegate as? SomeTableViewDelegate }
    set { self.delegate = newValue }
}

如果您想以更简洁的方式执行此操作(即:不要公开 2 个委托(delegate)属性),也许可以创建一个包含 UITableView 的自定义 UIView 子类。然后,您可以添加自己的属性,其名称为 delegate,类型为 SomeTableViewDelegate,并且在内部它会将类型转换为 TableView 委托(delegate)或从 TableView 委托(delegate)转换。这样你就不会公开两个委托(delegate)属性,它们都改变了 UITableView 的委托(delegate)属性。

关于ios - 如何更改子类上的变量数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43407862/

相关文章:

ios - 如何在 iOS 4 中列出 TCP/UDP 连接

ios - [managedObjectContext reset] 时核心数据崩溃;

ios - 使用 Swift 在 AV Audio Recorder 中实现队列服务

ios - 使用另一个 View Controller (带有 TableView )来显示 UISearchController 的结果

iphone - UIView removeFromSuperview 调用 viewWillDisappear

ios - 通用 Storyboard上的字体大小

ios - 使用 UIImagePickerController 使 UIView 显示相机 View

ios - 如何使用Layer sdk中的对话ID加入现有对话?

xcode - 无法在没有强制解包/零错误的情况下解包可选

swift - 将不同 View Controller 中的整数相加