基本的には、他のすべてのビューモデルを定義できる汎用ビューモデルを定義しようとしていますが、それらのデータは汎用性を維持する必要があります。以下のようなプロトコルを定義します。汎用プロトコルでViewModelデータをインスタンス化する
protocol GenericVMProtocol {
associatedtype T
var items: [T] { get }
}
次に、私はそれに私のVMに準拠してデータを定義します。
class VM: GenericVMProtocol {
typealias T = String
var items: [String] = ["A", "B" , "C"]
}
今ではすべてが期待通りに働いているが、私は私のVCを準拠するようにしたいときに問題が起こるためVMProtocol so:
class VC: UIViewController {
var vm: GenericVMProtocol
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
vm = VM()
super.init(nibName: nil, bundle: nil)
}
func items() {
print(vm.items)
}
required init?(coder aDecoder: NSCoder) {
fatalError()
}
}
イム取得エラー:
Protocol 'GenericVMProtocol' can only be used as a generic constraint because it has Self or associated type requirements
...そして私は、私は任意の助けをいただければ幸いです..私は、私はいくつかのロジックを欠けているか、私の考えが間違っている場合は、かなり無知だと言わなければなりません! TNX :)これは、あなたが直接型としてGenericVMProtocol
を使用することはできませんPAT
(プロトコル関連するタイプ)の問題がある