오늘은 약간의 손실로 인해 오늘 질문을합니다. 스위프트와 프로토콜에 관한 것이고, 프로토콜 지향 프로그래밍 (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
}
난 정말이 질문에 대한 대답을 관리하지 않는 것처럼 모든 것을 구현 다시 당신 프로토콜을 사용할 때 도움이 될 수 있으며 감사하지 않을 때는 도움이됩니다.
당신은 구조체와 함께 작동해야하지 않는 수업. btw https://developer.apple.com/videos/play/wwdc2015/408/ –
@LeoDabus 당신은 완전히 옳습니다. 죄송합니다. 클래스/구조체에서 실수를했습니다. 실제로이 경우는 전적으로 구조체입니다. 나는 나의 질문을 편집했다.그리고 링크를 주셔서 감사합니다 – DEADBEEF
일반적으로 프로토콜 사용에 대한 가능한 시나리오 중 하나는 여러 클래스의 일반적인 메소드/속성을 추상화하려는 경우이지만 어떤 이유로 든 상속을 사용하지 않으려는 경우 (예 : 클래스 이미 다른 클래스에서 상속해야 함). 현재 구현의 경우,이 프로토콜을 준수하는 여러 가지 클래스를 가지고 있다고 가정하지 않기 때문에'VolumeProtocol'을 만드는 것은 의미가 없습니다. –