我想将通用协议作为另一个协议的参数传递。
协议OperationDelegate { associatedtype T func onOperationFinished(结果:数组< T>) func onOperationError(…
protocol OperationDelegate { associatedtype T func onOperationFinished(result:Array<T>) func onOperationError(error: Error, errorMessage:String) } protocol ResultDelegate { func findResult<OpDelegate: OperationDelegate>(query: String, odelegate: OpDelegate) }
//添加了一些PlayGround作品
class ResultsFinder: ResultDelegate { func findResult<OpDelegate>(query: String, odelegate: OpDelegate) where OpDelegate : OperationDelegate { print(#function) // Do some operations let s1 = Student() s1.name = "one" let s2 = Student() s2.name = "two" let addressList = [s1,s2] odelegate.onOperationFinished(result: addressList as! [OpDelegate.T]) } }
也
class ResultDisplay: OperationDelegate { typealias T = Student func onOperationFinished(result: [Student]) { // Display address print(#function) } func onOperationError(error: Error, errorMessage: String) { // Display error print(#function) } }
class Mainfunction {
let resultDisplay = ResultDisplay() let finder = ResultsFinder() func start() { print(#function) finder.findResult(query: "Sridhar", odelegate: resultDisplay) }
}
let main = Mainfunction() main.start()