2017-09-09 11 views
0

余分な鋳造をしないでレスポンスでテンプレートを達成する方法を誰かが知っていますか?今私がそうした場合、Xcodeは私に動的にTをオーバーライドできないというエラーを返します。しかし、私は本当に正しい方法で信じていますが、何かを見逃しました。いいえ?追加鋳造なしのスウィフトレスポンステンプレート

今、それがどのように見えるです:コンパイラは、あなたがこのケースで

func pseudoResponse() { 
    let time: TimeInterval = 3.0 
    let response : Response<TimeInterval> = .success(response: time) 
    didReciveResponse(request: .time, response: response) 
} 

をタイプに注釈を付けるために持っていて、中にResponseタイプを指定する必要がジェネリック型を推論することはできませんのようfunc didReciveResponse(request: Request, response: Response<Any>)

enum Response<T> { 
     case success(response: T) 
     case failured(error: Error) 
    } 

    func pseudoResponse() { 
     let time: Timeinterval = 3 
     // somehow cast T (compiler shows error that I can't do this) 
     let response = .success<Timeinterval>(time) 
     didReciveResponse(.time, response) 
    } 

    // delegate method 
    func didReciveResponse(request: Request, response: Response) { 
     switch request { 
      case .time: 
      switch response { 
       // response without additional casting (as?) 
       case .success(let value): time = value 
      } 
     } 
    } 

答えて

0

デリゲートメソッド

func didReciveResponse(request: Request, response: Response<TimeInterval>) { ... 

ただし、あなたが作成したい場合didReciveResponse(実際にはdidReceiveResponse)も一般的に書く必要があります。

func didReciveResponse<T>(request: Request, response: Response<T>) {