2016-04-27 14 views
1

Alamofireの汎用Result enumを受け取り、それを自分自身のResult型に変換する一般的な列挙体の初期化子を記述しようとしています。何を作ってみた、次のされています一般的なSwift enumを別の一般的なenumから初期化しますか?

public enum Result<Value, Error: ErrorType> { 
    case Success(Value) 
    case Failure(Error) 

    public init(result: Alamofire.Result) { 
     switch(result) { 
     case Alamofire.Result.Success(let val): 
      self = MyFramework.Result.Success(val) 
     case Alamofire.Result.Failure(let err): 
      self = MyFramework.Result.Failure(err) 
     } 
    } 
} 

私は次のようなエラーに実行していますしかし:

Cannot invoke 'Success' with an argument list of type '(Value)' 

答えて

0

jtbandesが明示的に不可解なコンパイラエラーを取り除く一般的な引数の型を指定して、示唆したように。しかし、これが解決されると、私はもっと秘密のセグメンテーションを実行します。 MyFrameworkへの参照を削除遊んでいくつかの後

は、何らかの理由でセグメンテーションフォルトを解決しているようです。

2

これは、コンパイラは、ジェネリックの引数を推論する方法に問題があるように思われますAlamofire.Result

あなたは

init(result: Alamofire.Result<Value, Error>) { 

init(result: Alamofire.Result) { 

を変更することで、その方法をそれを修正することができ、一般的な引数が明示的に指定されている(あなたの結果の型の引数と同じになるように)。

これが与えたエラーメッセージはかなり役に立たないだったので、私はまた、あなたにfile a bugをお勧めします。

+0

一般的な引数を明示的に指定すると、奇妙なコンパイラエラーはなくなりますが、その問題を解決するとさらに奇妙なsegfaultが判明します。それをもう少し詳しく調べてみると、「MyFramework」への参照が原因です。それがなぜそうかもしれないのかについての考えはありますか?私は私の答えにまとめました。 – blau

+0

私はこれをテストしていたときに気付かなかったのですが、あなたのコードは私の単純なテストファイルよりも複雑な環境にあります。もう一度、bugs.swift.orgにバグを報告して、誰かがそれを見ることができるようにしておくべきだと思います(すでに既知の問題ではない場合)。 – jtbandes

+0

します。私はバグ報告を提出する前に、問題をさらに分離しようとします。ご協力いただきありがとうございます。 – blau

関連する問題