今日は少し失われてしまったので、今日質問をします。これはSwiftとプロトコル、そしてプロトコル指向プログラミング(POP)に関するものです。スイフトでプロトコルを使用する場合
私はそれについての記事、さらには本を読んだが、私はまだ混乱している。プロトコルはすばらしいツールだと言われていますが、私はその力を本当に理解していません。
私はオブジェクトとしてのボリュームの表現であるクラスVolumeをコーディングしているので、私は質問があります。たとえば、
struct Volume {
var value: Float = 1
var isLogScale: Bool = false
var maxLogVolume: Float = 6.0 // value in dB
var maxLinearVolume: Float = 1.0
let dynamicRange: Float = 50.0
func convertLinearToLog() -> Float {
// Do some maths
}
func otherFunction() {
print("Hello, I'm the most useless function in the world.")
}
}
これは一般的なクラスではありません。
しかし...私より良い私たちのこのようなプロトコル必要があります。その後、
protocol VolumeProtocol {
var value: Float {get set}
var isLogScale: Bool {get set}
var maxLogVolume: Float {get set}
var maxLinearVolume: Float {get set}
let dynamicRange: Float {get}
func convertLinearToLog() -> Float
func otherFunction()
}
そして、私は本当にこの質問に答えるために管理するので、あなた場合はありません
struct MyVolumeClass: VolumeProtocol {
// Same thing as before
}
のようなすべてのものを再実装プロトコルを使用するときに私を助けることができますし、私は感謝しません。
あなたは構造体で動作するはずありませんクラス。見て分かる価値がありますhttps://developer.apple.com/videos/play/wwdc2015/408/ –
@LeoDabusあなたはまったく正しいです。申し訳ありませんが、私はここでクラス/構造体について間違いを犯しました。実際、このケースは完全に構造体です。私は私の質問を編集しました。そして、リンクありがとう – DEADBEEF
一般的に、プロトコルを使用するシナリオの1つは、いくつかの共通メソッド/プロパティをいくつかのクラスから抽象化したいときですが、何らかの理由で継承を使用したくない場合(クラスすでに他のクラスから継承する必要があります)。現在の実装では、このプロトコルに準拠したいくつかの異なるクラスを持つとは考えていないので、 'VolumeProtocol'を作成するのは意味がありません。 –