我有我的Swift项目,我想创建一个动画师。我将在我的所有视图控制器中使用此动画对象为每个视图控制器创建一个特定对象。实际的动画制作者对象必须符合except tf.errors.CancelledError
协议。参见示例:
这是Animator
协议:
Animator
这是一个真正的动画师对象:
protocol Animator {
associatedtype ViewControllerGeneric
var controller: ViewControllerGeneric { get }
/// Init the animator
///
/// - Parameter controller: The UIViewController to bind to the animator
init(withController controller: ViewControllerGeneric)
}
这里一切都很好。然后,我希望我的所有class SolutionAnimator: Animator {
private (set) var controller: SolutionsViewController
required init(withController controller: SolutionsViewController) {
self.controller = controller
}
}
子类都遵循我的其他协议UIViewController
,即:
UIViewControllerAnimator
这里我想要一个名为protocol UIViewControllerAnimator {
associatedtype AnimatorObject: Animator
var animator: AnimatorObject { get set }
}
的var,它是一个通用类型animator
,必须符合AnimatorObject
协议。
当我在MyViewController中编写所有内容时,如下所示:
Animator
Xcode告诉我class MyViewController: UIViewController, UIViewControllerAnimator {
var animator: SolutionAnimator!
}
不符合协议MyViewController
。
你有什么建议吗?
答案 0 :(得分:2)
您的MyViewController
不符合UIViewControllerAnimator
。您的协议要求:
associatedtype AnimatorObject: Animator
var animator: AnimatorObject { get set }
你的班级提供:
var animator: SolutionAnimator!
但SolutionAnimator!
不符合Animator
。 SolutionAnimator
。删除!
。
如果您有某些技术原因导致无法删除!
(例如,如果这是从故事板中实例化的,那可能是行不通的话),那么您只需要隐藏!
这样你才能正确地遵守协议:
private var _animator: SolutionAnimator!
var animator: SolutionAnimator {
get { return _animator }
set { _animator = newValue }
}