###何がしたいか
UITableViewのindexPath.rowの操作で条件分岐するとき
swift
1 2switch indexPath.row { 3 case 1: 4 print(1) 5 case 2...3: 6 pinrt(2) 7} 8
このようにCountableClosedRange<Int>かIntどちらかを返すメソッドをenumで作ろうとしているのですが、うまくいきません。
↓これがやったコードです。そもそもどちらかの型を返すメソッドは作れるでしょうか?
enum Either<T1, T2> { case left(T1) case right(T2) } fileprivate enum CellType { case firstCell case secondToThirdCell func row() -> Int, CountableClosedRange<Int> //どちらでも返せるようにしたい { let either: Either<Int, CountableClosedRange<Int>> switch self { case .firstCell: either = 1 return either case .secondToThirdCell: either = 1...3 return either } } }
戻り値をどういう風に使うのか書かれていないので分からないのですが、両方ともCountableClosedRange<Int>だとダメなのでしょうか?(1じゃなくて1...1を返す)
おっしゃる通りで(1じゃなくて1...1を返す)これで実現はできるのですが、逆に言うと1...1は本来であれば1なので、Intで返したいなと言うお話でした。
戻り値を使う側で、IntとCountableClosedRange<Int>を判断(処理分岐)しないといけなくなりませんか?無駄なことをしているようにしか見えないのですが。
使用する側は、UITableViewを継承したSubClassのindexPath.rowのswitch文で使用します。 なので、判断(条件分岐)する必要はありません。Swift 勉強中でジェネリクスとかを駆使すれば、綺麗に書けるのかなと思い質問させていただきました。 CountableClosedRange<Int> で 1…1と書けばすむので、この質問は閉じさせていただきます。 お手数おかけしてすみません。
なるほど。row()の戻り値になっていたので、その先で使うのかと思ってました。
質問のコードは自分が試行錯誤して色々試してみたけどダメだったコードです ????
回答3件
あなたの回答
tips
プレビュー