enumにパターン別のjsonパーサーを定義したいと思っています。
それぞれのパターンには独自のクラスを別途作り、それに値を与える想定であるため、パターンごとに返却される配列内のクラスが異なります。
(ここでは簡単のため独自クラスKuikiのみ定義しています)
そこで、パターンごとの差異を吸収するため、パーサーの戻り値をジェネリクスにして対応しようと思い以下のコードを書いたのですが、うまくいきません。
これだけの情報で恐縮ですが、なにか解決策はありますでしょうか。
Swift
1enum GisJsonParser { 2 3 case KuikiType 4 5 func parse<T>(json: JSON) -> [T] { 6 switch self { 7 8 case .KuikiType: 9 var kuikiArray: [Kuiki] = [] 10 json["features"].forEach{(_, subjson) in 11 12 var pointArray: [Double] = [0,0] 13 var regionArray: [[Double]] = [[0,0]] 14 15 subjson["geometry"]["coordinates"][0][0].forEach({ (_, subSubJson) in 16 pointArray[0] = subSubJson[0].doubleValue 17 pointArray[1] = subSubJson[1].doubleValue 18 regionArray.append(pointArray) 19 }) 20 21 let kuiki = Kuiki.init(properties: subjson["properties"], 22 cdn: regionArray) 23 kuikiArray.append(kuiki) 24 } 25 return kuikiArray as! [T] // Error: "T" is not a subtype of "Kuiki". 26 } 27 } 28} 29
回答2件
あなたの回答
tips
プレビュー