genericsを使って異なる型を戻り値として受け取る関数の書き方を教えて下さい。
現状playgroundで↓なかんじでかいてまして、戻り値をオプショナルでないA型もしくはB型で受け取りたいと思っています。
swift
1import UIKit 2 3enum Type { 4 case a 5 case b 6} 7 8class A { 9 var name: String 10 11 init(name: String) { 12 self.name = name 13 } 14} 15 16class B { 17 var name: String 18 19 init(name: String) { 20 self.name = name 21 } 22} 23 24class D { 25 26 var name: String 27 var arrayOfA: [A] 28 var arrayOfB: [B] 29 30 init(name: String) { 31 self.name = name 32 arrayOfA = [A]() 33 arrayOfB = [B]() 34 } 35} 36 37 38class Test { 39 40 var data: D 41 42 init(dataName: String) { 43 data = D(name: dataName) 44 } 45 46 func getContents<T>(type: Type, index: Int) -> T { 47 switch type { 48 case .a : 49 if data.arrayOfA.isEmpty { fatalError() } // ここは通らないのでクラッシュさせる 50 return data.arrayOfA[index] // <= Cannot convert return expression of type 'A' to return type 'T' 51 case .b : 52 if data.arrayOfA.isEmpty { fatalError() } // ここは通らないのでクラッシュさせる 53 return data.arrayOfB[index] // <= Cannot convert return expression of type 'B' to return type 'T' 54 } 55 } 56} 57 58 59let test = Test(dataName: "test") 60 61test.data.arrayOfA.append(A(name: "1")) 62test.data.arrayOfB.append(B(name: "い")) 63 64let sample = test.getContents(type: .a, index: 0) // <= Generic parameter 'T' could not be inferred 65 66print(type(of: sample), sample) 67 68 69 70
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/01/15 03:41
2020/01/15 14:13