Skip to main content
 首页 » 操作系统

ios之我可以在 Swift 中强制协议(protocol)符合吗

2024年01月01日42jirigala

我想这样做:

UIView <UITextFieldDelegate>*

很快。

使子类化 UIView 的对象也符合 UITextFieldDelegate协议(protocol)。

请您参考如下方法:

可以表达(id <UITextFieldDelegate, UIScrollViewDelegate>)使用 Protocol Composition
但不是(UIView<UITextFieldDelegate> *) .除了类定义。

// Obj-C 
- (void)methodName:(id <UITextFieldDelegate, UIScrollViewDelegate>)arg { ... } 
 
// Swift 
func methodName(arg:protocol<UITextFieldDelegate, UIScrollViewDelegate>!) { ... } 

实际上,一个 Obj-C 方法声明为 - (void)methodName((UIView<UITextFieldDelegate> *))arg; ,当它桥接到 Swift 时,你可以用任何 UIView 调用实例。

编辑:

经过一些研究,您似乎可以声明您的 func像这样

func myFunc<T:UIView where T:UITextFieldDelegate>(view:T) { ... }