符合协议

时间:2016-03-03 13:15:10

标签: ios swift protocols

我有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

1 个答案:

答案 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协议的类