2017-04-14 2 views
2

Je suis sous-classe disons par exemple UITableView et je veux changer l'une de ses variables pour convenir à un délégué de protocole à moi.Comment changer le type de données variable sur la sous-classe

@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 
} 

Je veux ajouter quelques implémentations à UITableViewDelegate mais comme un autre protocole et non pas comme UITableViewDelegate depuis que j'ai d'autres propriétés ajoutées sur SomeTableView comme someProperty

Et oui, je sais que je peux faire quelque chose comme ça

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

class SomeTableView: UITableView { 

    override weak var stDelegate: SomeTableViewDelegate? 

} 

Est-ce possible d'une manière ou d'une autre?

Répondre

1

Je ne pense pas que vous pouvez l'ignorer directement. Ce que vous pouvez faire cependant, c'est créer une propriété supplémentaire de type , mais bien sûr avec un nom différent. La propriété peut agir comme un shill et définir la propriété delegate à la place. Quelque chose comme:

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

Si vous voulez faire cela d'une manière plus propre (i.e. .: ne pas exposer 2 propriétés délégué), peut-être créer une sous-classe personnalisée UIView qui contient un UITableView. Vous pouvez ensuite ajouter votre propre propriété avec le nom delegate de type et, en interne, il transtyperait le type de et vers le délégué de vue de table. De cette façon, vous n'exposeriez pas 2 propriétés de délégué qui à la fois modifient la propriété delegate sur UITableView.

+0

La sous-classe personnalisée qui contient un UITableView ressemble à la meilleure façon de le faire. Merci, ça ne m'est pas arrivé jusqu'à maintenant, la vision tunnel je suppose –