Ios 如何声明实现多个协议的参数

Ios 如何声明实现多个协议的参数,ios,swift,Ios,Swift,我有一个自定义UIView,其中包含一个UIPickerView。我现在要做的是创建一个函数,以UIPickerView的委托形式传递参数: class MQPickerView: UIView { let pickerView = UIPickerView() ...... func setDelegate(delegate: AnyObject) { self.pickerView.dataSource = delegate

我有一个自定义UIView,其中包含一个UIPickerView。我现在要做的是创建一个函数,以UIPickerView的委托形式传递参数:

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更新了答案。现在应该可以为你工作了。