Как расширить Activity в Kotlin как расширение UIViewController в Swift - PullRequest
0 голосов
/ 25 февраля 2020

Прежде всего, я не хочу этих расширений

Вот мой пример на swift,

class ViewController: UIViewController {

    @IBOutlet weak var collectionView: UICollectionView!
    @IBOutlet weak var tableView: UITableView!
}

extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource {
    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 0
    }

    etc...
}

extension ViewController: UITableViewDelegate, UITableViewDataSource {
    override func numberOfSections(in tableView: UITableView) -> Int {
        return 0
    }

    etc...
}

Так что таким образом я сохраняю свой класс чистым и все организовано в «блоках расширения»

Вот что я имею в Kotlin, и мой вопрос, могу ли я сделать что-то подобное с моим быстрым кодом

class MyActivity: AppCompatActivity(), MyManagerListener2, MyManagerListener {
    override fun onSuccessMyManagerListener() {}

    override fun onSuccessMyManagerListener2() {}
}

Два слушателя так Я хочу два "расширения", такие как

class MyActivity: AppCompatActivity() {} 

extension MyActivity: MyManagerListener2 {
    override fun onSuccessMyManagerListener2() {}
}

extension MyActivity: MyManagerListener {
    override fun onSuccessMyManagerListener() {}
}

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 25 февраля 2020

Может быть, не совсем то, что вы ищете, но вы можете организовать свой код по регионам, начав часть, которую вы хотите сгруппировать вместе, с //region <name of region> и заканчивая //endregion. Это позволяет вам свернуть и развернуть части вашего кода, когда вы sh. например, это будет выглядеть так:

enter image description here

Когда вы свернете его, нажав маленькую кнопку перед ним, вы получите следующее:

enter image description here

Я не знаком с расширением Swift, поэтому я не знаю, действительно ли это то, что вы ищете, или у них есть другие преимущества, но это может сделать ваш код выглядеть чище.

1 голос
/ 25 февраля 2020

Kotlin не позволяет переопределять методы с расширением. Так же как и Свифт. В Swift вы заявляете о присоединении к протоколу в расширении, а не к определению класса, поэтому на самом деле вы не переопределяете функцию. Недостаток в Kotlin заключается в том, что вы не можете использовать расширение для привязки класса к интерфейсу, поэтому вы не можете сделать это в любом случае.

По-моему, что вы там делаете в Swift - злоупотребление функцией, предназначенной для чего-то другого. Он предназначен для того, чтобы вы могли сделать класс более универсальным, используя его уже опубликованные функции c. Но если вы манипулируете его внутренними членами с помощью расширения, то вы должны сделать члены опубликованными c. Таким образом, вы нарушаете инкапсуляцию двумя различными способами без реальной выгоды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...