我有struct
符合协议。该协议指定了一个需要符合另一个协议的变量。在我的struct
中,我想使用符合所需协议的特定类型来声明该变量。
代码,应该使它更清晰:
protocol ViewModel {
var isActive: Bool { get }
}
struct TestViewModel: ViewModel {
var isActive = false
}
protocol View {
var viewModel: ViewModel { get }
}
struct TestView: View {
var viewModel: TestViewModel
}
使用上面的代码,我会收到一个编译器错误,指出类型TestView
不符合协议View
。我原以为TestViewModel
符合ViewModel
,这样就可以了,但显然不是。
有什么方法可以做我想做的事吗?在viewModel
中使用时,我需要将TestViewModel
类型投放到TestView
。
答案 0 :(得分:2)
您需要使用泛型(协议中的typealias)
@{
var htmlAttr = new Dictionary<string, object>();
htmlAttr.Add("onchange", string.Format("{0}{1})", "CallChangefunc(this.value", @ViewBag.id));
htmlAttr.Add("class", "form-control");
}
@Html.DropDownList("RaceId", ViewData["Races"] as List<SelectListItem>, @htmlAttr)
这应该有效,你告诉结构,viewModel应该是一个实现ViewModel协议的类