現在、私は1つのプロジェクトに取り組んでいます。以下のような複数のコントローラにコードが重複している可能性があります。コントローラに重複コードがあります
コントローラA
class A: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
// about 50~70 lines of codes
@IBAction func scanButtonTapped {
// used self (as AVCaptureMetadataOutputObjectsDelegate)
// used view
// called presentViewController(...), which is a func in UIViewController
}
}
コントローラB
class B: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
@IBAction func scanButtonTapped {
// will need same logic as in Controller A
}
}
私の現在のソリューションは、別のクラスCを有しており、それに複製コードを移動しています。しかし、私がそうした場合、コントローラーはAVCaptureMetadataOutputObjectsDelegate
にキャストできますが、UIViewController
にはキャストできません。
class C {
func btnTapped (view: UIView, controller: AnyClass) {
// logic is here
// controller can cast to AVCaptureMetadataOutputObjectsDelegate
// but controller cannot cast to UIViewController
}
}
ので、AとBは、UIViewController
にコントローラをキャストすることが可能であるならば私の質問がある
class A {
@IBAction func scanButtonTapped {
let c = C()
c.btnTapped(view, self)
}
}
を持つことになります。または、コードを適切にリファクタリングする別の方法がありますか?
なぜあなたは 'クラスCを行ういけない:その後のUIViewController、AVCaptureMetadataOutputObjectsDelegate {...}'と 'クラスA:C {'と 'クラスB:C {' ? – luk2302