Как создать класс UIImageView, который наследуется от другого класса в Swift 5 - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь выяснить, как создать пользовательский класс UIImagView, который наследует функции от другого класса, такого как класс UIViewController по умолчанию.

Код:

extension ViewController {
  class CustomClass: UIImageView {

    override init(frame: CGRect) {
        super.init(frame: frame)

        TestFunction()
    }
  }
}

class ViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
  }

  func TestFunction() {
    print("Hello")
  }
}

Мне нужно иметь возможность добраться до функции с именем TestFucntion (), не выполняя что-то вроде этого ViewController (). TestFucntion () Я хочу иметь возможность просто вызывать функцию, такую ​​как: TestFucntion (), но ту часть, которую я У меня проблема в том, что Мне нужно, чтобы CustomClass был классом UIImageView

Когда вы попытаетесь вызвать TestFunction () из вашего нового пользовательского класса, он выдаст вам эту ошибку:

Элемент экземпляра 'TestFunction' нельзя использовать для типа 'ViewController'; Вы хотели использовать вместо этого значение этого типа?

Итак, в конце концов нам нужен класс Custom UIImageView, чтобы иметь возможность прямого доступа к функциям из родительского класса UIViewController простым вызовом тогда как TestFunction (), а не ViewController (). TestFunction ()

1 Ответ

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

Я думаю, что делегирование - это хороший способ связать вызов testFunction () между imageView и контроллером. Добавьте вычисляемое свойство в viewController с помощью пользовательского инициализатора. Этот инициализатор, как ваш код выше, может вызывать testFunction () .

protocol TestFunction {
  func test()
}

class MyImageView: UIImageView {

  var delegate: TestFunction?

  init(frame: CGRect, tester: TestFunction? = nil) {
    super.init(frame: frame)
    delegate = tester
    delegate?.test()
  }

  required init?(coder: NSCoder) {
    super.init(coder: coder)
  }

}

class MyViewController: UIViewController, TestFunction  {

  var imageView: MyImageView? {
    return MyImageView(frame: .zero, tester: self)
  }

  func test() {
    print("test")
  }

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