Avatar
今やりたいのは↓なので init(uiImage: UIImage) { if let cgImage = uiImage.cgImage { self.init(cgImage: cgImage) } else if let ciImage = uiImage.ciImage { ... self.init(...) } else { guard uiImage.size == .zero else { fatalError(...) } self.init(width: 0, height: 0, pixels: []) } }
4:28 AM
この } else if let ciImage = uiImage.ciImage { ... self.init(...) の部分が watchOS では CoreImage が使えない関係でエラーになってしまうので除去したいけど #if でここだけ除去できないので
4:31 AM
共通部分をくくりだすにしても
  • イニシャライズはしないといけないのでメソッドにはできない
  • 例えば else { } の中イニシャライザにしようとすると型で区別できない→特殊なラベル名を持ったイニシャライザを作ることになるけど、 UIImage がサイズ .zero のときにしか呼んではいけないとかわかりづらすぎる
  • その側の if/else if/else の条件分岐の条件は括り出しようがない
のでコードジェネレーションで共通化しました。