신속 프로토콜 및 관련 유형 구현하는 경우 :확인 두 개체 내가 같은 관련 유형과 프로토콜을 선언 있어요 스위프트 3 프로젝트가
protocol ViewModelContainer {
associatedtype ViewModelType
var viewModel: ViewModelType! { get set }
}
을 그리고 나는 두 물체 있는지 확인하려면 ViewModelContainer
을 구현하고 할당 유형을 ViewModelType
으로 지정하면 '일반적인'방식으로 할당됩니다.
이상적으로 나는 같은 것을 할 싶습니다
if let container = container as? ViewModelContainer, let model = model as? container.ViewModelType {
container.viewModel = model
}
을하지만 캐스트 할 수 container
ViewModelContainer
에 :
프로토콜 'ViewModelContainer'은 단지 일반적인 제약 조건으로 사용할 수 있습니다자체 또는 관련 유형 요구 사항이 있기 때문에
나의 현재 해결 방법은 직접 특정 클래스와 관련 타입으로 후퇴하는 것입니다,하지만 경향이 매우 자세한 오류 내 코드를 잎 :
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? MediaPlaySelectionViewController, let vm = sender as? MediaPlaySelectionViewModel {
vc.viewModel = vm
}
if let vc = segue.destination as? SearchResultsViewController, let vm = sender as? SearchResultsViewModel {
vc.viewModel = vm
}
if let vc = segue.destination as? ReviewDetailsViewController, let vm = sender as? ReviewDetailsViewModel {
vc.viewModel = vm
}
if let vc = segue.destination as? ReviewComposerViewController, let vm = sender as? ReviewComposerViewModel {
vc.viewModel = vm
}
}
I 일반적인 UIViewController
의를 사용했지만, 그러므로 Objective-C doesn't recognize generic Swift classes 때문 붙어있어 스토리 보드에서는 사용할 수 없습니다.
이 정말 바보입니다 ...하지만 당신이 빈 프로토콜을 확인한 다음 할 경우 ViewModelContainer''에 부합하는 모든 종류의 당신에게 다음, 해당 프로토콜을 준수 이 문제에 대해 부딪히지 않고 해당 프로토콜에 대한 적합성을 확인하십시오. – BallpointBen
진짜 질문은 왜'container'가'ViewModelContainer'를 따르는 타입으로 정적으로 타입 화되지 않았을까요? 당신은 잘 유형 지우개를 찾고 있을지도 모른다. – Hamish
왜'ViewModelType'을 프로토콜로 만들지 않겠습니까? – dichen