Swift에서 let in protocol을 사용할 수없는 이유는 무엇입니까?
var 및 키워드 {get set} 사용에 대한 Swift의 프로토콜에 대해 의문이 있습니다 .
에서 애플 문서 :
프로토콜에서 속성을 가져오고 설정할 수 있어야하는 경우 해당 속성 요구 사항은 상수 저장 속성 또는 읽기 전용 계산 속성으로 충족 될 수 없습니다. 프로토콜이 속성 만 가져 오도록 요구하는 경우 모든 종류의 속성으로 요구 사항을 충족 할 수 있으며, 이것이 자신의 코드에 유용 할 경우 속성을 설정할 수있는 것도 유효합니다.
속성 요구 사항은 항상 var 키워드로 시작하는 변수 속성으로 선언됩니다. Gettable 및 settable 속성은 유형 선언 후에 {get set}을 작성하여 표시하고 gettable 속성은 {get}을 작성하여 표시합니다.
let을 사용할 수없는 이유를 이해할 수 없습니다 . get 만 사용하는 프로토콜 의 var 는 let a가 아닙니다 .
이 같은:
protocol someProtocol
{
var someProperty: String { get }
}
그것은 단지 다음이 아닙니다.
protocol someProtocol
{
let someProperty: String
}
내가 뭔가 빠졌나요?
"get 만있는 프로토콜의 var는 그냥 let이 아닙니까?" A let는 상수를 나타냅니다. 그러나 여기서는 그렇지 않습니다. 다음을 고려하세요:
protocol SomeProtocol {
var someProperty: String { get }
}
class SomeClass : SomeProtocol {
var someProperty: String = ""
func cla () {
someProperty = "asd"
}
}
let someInstance = SomeClass()
print(someInstance.someProperty) // outputs ""
someInstance.cla()
print(someInstance.someProperty) // outputs "asd"
프로토콜은 준수하는 클래스가 외부에 표시하는 것을 지정합니다 . 최소한 얻을 수 있는String 이름 someProperty이 지정된 유형의 일부 속성입니다 .
프로토콜이 지정하면 { get }클래스가 준수 let someProperty: String = ""하도록 선택할 수 있지만 유사하게 위 코드를 통해 준수하도록 선택할 수 있습니다. 반면에 프로토콜 이 구현에서 { get set }사용할 수 없지만 let설정 가능하게 만들어야한다고 지정하는 경우.
프로토콜은 값이 상수 여야한다는 것을 정의 할 수 없습니다. 또한 값을 구현하는 클래스 / 구조체에 의해주의 (또는 결정)되어야하는 구현 세부 사항이 아니어야합니다.
차이점은
protocol MyProtocol {
let someProperty: String
}
which makes no sense — a protocol isn't supposed to dictate how someProperty is defined/stored, only that it's available as a property. It could be either a computed or stored property, but that's for the implementer to decide, not the protocol itself.
and
protocol MyProtocol {
var someProperty: String { get } // abstract interface
}
struct MyStruct: MyProtocol {
let someProperty: String // concrete implementation: stored property
}
struct OtherStruct: MyProtocol {
let i: Int
var someProperty: String { return "\(i)" } // concrete implementation: computed property
}
which is perfectly allowed!
참고URL : https://stackoverflow.com/questions/34385897/why-i-cant-use-let-in-protocol-in-swift
'Program Club' 카테고리의 다른 글
| CMake에서 여러 실행 파일 추가 (0) | 2020.12.08 |
|---|---|
| Typescript-다차원 배열 초기화 (0) | 2020.12.08 |
| Intellij IDEA에 추가 javadoc 첨부 (0) | 2020.12.08 |
| null이 아닌 제약 조건을 어떻게 삭제할 수 있습니까? (0) | 2020.12.08 |
| 인터넷에서 XAMPP Localhost에 액세스 (0) | 2020.12.07 |