Ios 如何声明实现多个协议的参数
我有一个自定义UIView,其中包含一个UIPickerView。我现在要做的是创建一个函数,以UIPickerView的委托形式传递参数:Ios 如何声明实现多个协议的参数,ios,swift,Ios,Swift,我有一个自定义UIView,其中包含一个UIPickerView。我现在要做的是创建一个函数,以UIPickerView的委托形式传递参数: class MQPickerView: UIView { let pickerView = UIPickerView() ...... func setDelegate(delegate: AnyObject) { self.pickerView.dataSource = delegate
class MQPickerView: UIView {
let pickerView = UIPickerView()
......
func setDelegate(delegate: AnyObject) {
self.pickerView.dataSource = delegate
self.pickerView.delegate = delegate
}
}
我首先尝试使用AnyObject类型,但它不能传递给数据源和pickerView的委托。我如何声明参数类型以表示我需要一个实现pickerView的数据源和委托的参数?您可以将泛型参数与
where
子句一起使用,如下所示:
Swift 3:
func setDelegate<T>(delegate: T) where T: UIPickerViewDelegate, T:UIPickerViewDataSource {
self.pickerView.dataSource = delegate
self.pickerView.delegate = delegate
}
func setDelegate<T where T: UIPickerViewDelegate, T:UIPickerViewDataSource>(delegate: T) {}
func setDelegate(delegate:T),其中T:UIPickerViewDelegate,T:UIPickerViewDataSource{
self.pickerView.dataSource=委托
self.pickerView.delegate=委托
}
Swift 2:
func setDelegate<T>(delegate: T) where T: UIPickerViewDelegate, T:UIPickerViewDataSource {
self.pickerView.dataSource = delegate
self.pickerView.delegate = delegate
}
func setDelegate<T where T: UIPickerViewDelegate, T:UIPickerViewDataSource>(delegate: T) {}
func setDelegate(委托:T){
我认为,您必须将您的代表作为参考人传递。尝试使用“inout”参数编译器错误:“行上的连续声明必须用分隔符分隔;”您使用的是swift 2还是swift 3?@itenyh更新了答案。现在应该可以为你工作了。