我有一个@RequestMapping(value = "/save", method = RequestMethod.POST)
public String saveUser(Model model, @Validated @ModelAttribute("user") SystemUser user, BindingResult result) {
}
专用协议
UIViewController
我有一个带有protocol VCProtocol where Self: UIViewController {}
参数的函数。在函数内部,我无法访问VCProtocol
UIViewController
尽管我可以将协议参数转换为func testFunction(vcProtocol: VCProtocol) {
// vcProtocol.view ‼️ error: Value of type 'VCProtocol' has no member 'view'
}
,然后像这样访问属性:
UIViewController
是这样吗?我们有更好的方法吗?
答案 0 :(得分:4)
您可以使用&
运算符来组合协议
protocol VCProtocol where Self: UIViewController {}
func testFunction(vcProtocol: VCProtocol & UIViewController) {
let view = vcProtocol.view
}
答案 1 :(得分:1)
看来Swift 5已正确支持此功能。您可以尝试使用Xcode 10.2 beta4。对于较早的版本,您将不得不求助于@Ricky Mo的solution。
protocol VCProtocol: UIViewController {
func testFunction(vcProtocol: VCProtocol)
}
class A: UIViewController, VCProtocol {
func testFunction(vcProtocol: VCProtocol) {
debugPrint(vcProtocol.view)
}
}
从笔记中
协议现在可以将其符合类型限制为 子类化给定的类。支持两种等效形式:
protocol MyView: UIView { /*...*/ } protocol MyView where Self: UIView { /*...*/ }
Swift 4.2接受了第二种形式,但尚未完全实施 有时可能会在编译时或运行时崩溃。 (SR-5581) (38077232)