У меня есть этот протокол:
protocol Container: class where Self: UIViewController {
var containerView: UIView! { get }
var currentChild: UIViewController? { get set }
func remove(child viewController: UIViewController)
func add(child viewController: UIViewController)
func replaceCurrentViewController(with newChild: UIViewController)
}
проблема, с которой я сталкиваюсь, заключается в том, что он показывает следующее предупреждение
Избыточное ограничение 'Self': 'AnyObject'
это потому, что я использую оба class & , где Self: UIViewController , но мне нужны оба!причина в моем расширении протокола (см. ниже), я использую методы UIViewController, и если я удаляю class , мое расширение показывает ошибку, запрашивающую добавление mutating , что должноне имеют, потому что это протокол только для класса.
extension Container {
func remove(child viewController: UIViewController) {
viewController.beginAppearanceTransition(false, animated: true)
viewController.willMove(toParent: nil)
viewController.removeFromParent()
viewController.view.removeFromSuperview()
viewController.endAppearanceTransition()
currentChild = nil
}
func add(child viewController: UIViewController) {
viewController.beginAppearanceTransition(true, animated: true)
addChild(viewController)
viewController.didMove(toParent: self)
containerView.addSubview(viewController.view)
viewController.view.frame = containerView.frame
viewController.endAppearanceTransition()
currentChild = viewController
}
func replaceCurrentViewController(with newChild: UIViewController) {
if viewIfLoaded != nil, let currentChild = currentChild {
if let parent = currentChild.parent, parent == self {
remove(child: currentChild)
}
add(child: newChild)
}
}
}
Итак, есть ли лучшее решение?можно удалить предупреждение?