は、私は事前に謝罪タイトルは不明であるが、私はこれが最初のいくつかのコードスニペットで可能であるか知りたい場合:異なるクラスを異なるプロトコルの同じプロトコルにするにはどうしたらいいですか?
ClassOne:
@objc protocol FetchProtocol
{
var someVar: Bool
{
get set
}
var someUIView: FetchProtocol
{
get set
}
func someFuncOne()
}
class ClassOne: UIViewController, FetchProtocol
{
...
@IBOutlet var someUIView: FetchProtocol!
....
}
ClassTwo:
@objc protocol FetchProtocol
{
var someVar: Bool
{
get set
}
var someTableView: FetchProtocol
{
get set
}
var someUIView: FetchProtocol
{
get set
}
func someFuncOne()
func someFuncTwo()
}
class ClassTwo: UIViewController, FetchProtocol
{
...
@IBOutlet var someTableView: FetchProtocol!
@IBOutlet var someUIView: FetchProtocol!
....
}
両方ClassOne
とClassTwo
は同じFetchProtocol
に一致し、両方のクラスは同じsomeVar
とsomeFuncOne
を使用しますが、ClassTwo
も、ClassTwo
に固有のsomeTableView
とsomeFuncTwo
を使用しています。
どちらのクラスでも同じプロトコルを使用できますが、他のクラスには「追加の」骨格の実装がありますか?例えば
、次のようなもの:
if let vc = currentVC as? FetchProtocol
{
if vc.someVar == true
{
// Check if vc is of class type ClassOne, call someFuncOne
// Otherwise if vc is of class type ClassTwo, call someFuncOne and someFuncTwo
}
}
は、プロトコルを使用して上記の可能性のようなものですし、もしそうなら、どのようにそれを正しく実装するために、または別の選択肢がありますか?
プロトコル2をプロトコル1から継承し、プロトコル2を拡張して、必要な余分なものを含めるようにします。 – Alexander
@AlexanderMomchliov:意味がありますが、追加の 'someFuncTwo'を呼び出す前に、' vc'が特定のクラス型であるかどうかを確認するにはどうすればいいですか? – Pangu
なぜそれがどのクラスであるかチェックしていますか?それは最初にプロトコルを持つ目的を破るものです。 – Alexander