programing

빠른 읽기 전용 외부, 읽기 쓰기 내부 속성

magicmemo 2023. 8. 9. 20:40
반응형

빠른 읽기 전용 외부, 읽기 쓰기 내부 속성

Swift에서 속성을 외부에서만 읽을 수 있지만 속성을 소유한 클래스(및 하위 클래스)에 의해 내부적으로 수정할 수 있는 공통 패턴을 정의하는 일반적인 방법은 무엇입니까?

목표-C에는 다음과 같은 옵션이 있습니다.

  • 인터페이스에서 속성을 읽기 전용으로 선언하고 클래스 확장을 사용하여 내부적으로 속성에 액세스합니다.이것은 메시지 기반 액세스이므로 KVO, 원자성 등과 잘 작동합니다.
  • 인터페이스에서 속성을 읽기 전용으로 선언하지만 내부적으로 백업 ivar에 액세스합니다.ivar에 대한 기본 액세스가 보호되므로 이는 클래스 계층에서 잘 작동하며, 하위 클래스에서도 값을 수정할 수 있지만 그렇지 않으면 필드가 읽기 전용입니다.

자바의 표기법은 다음과 같습니다.

  • 보호된 필드를 선언하고 공용 읽기 전용 게터(메소드)를 구현합니다.

스위프트의 관용구는 무엇입니까?

클래스 속성이 주어지면 속성 선언 앞에 액세스 수식자를 붙여 다른 액세스 수준을 지정할 수 있습니다.get또는set괄호 안에예를 들어, 공용 getter와 개인 setter가 있는 클래스 속성은 다음과 같이 선언됩니다.

private(set) public var readonlyProperty: Int

권장 판독치: 게터와 세터

접근성 수준에 대한 Martin의 고려 사항은 여전히 유효합니다. 즉, 없습니다.protected수식어,internal모듈에 대한 액세스만 제한합니다.private현재 파일에만 적용됩니다.public무제한으로

스위프트 3 노트

2개의 새로운 액세스 수정자,fileprivate그리고.open언어에 추가되었지만, 반면에private그리고.public약간 수정되었습니다.

  • open클래스 및 클래스 멤버에만 적용됩니다. 클래스를 하위 클래스로 분류하거나 멤버를 정의된 모듈 외부에서 재정의하는 데 사용됩니다.public대신 클래스 또는 구성원을 공개적으로 액세스할 수 있도록 하지만 상속하거나 재정의할 수는 없습니다.

  • private이제 구성원을 볼 수 있고 동봉된 선언에서만 접근할 수 있게 만드는 반면,fileprivate파일이 포함된 전체 파일로

자세한 내용은 여기에 있습니다.

@Antonio에 따르면, 우리는 단일 속성을 사용하여 액세스할 수 있습니다.readOnly재산 가치 공개 및readWrite사석에서다음은 제 그림입니다.

class MyClass {

    private(set) public var publicReadOnly: Int = 10

    //as below, we can modify the value within same class which is private access
    func increment() {
        publicReadOnly += 1
    }

    func decrement() {
        publicReadOnly -= 1
    }
}

let object = MyClass()
print("Initial  valule: \(object.publicReadOnly)")

//For below line we get the compile error saying : "Left side of mutating operator isn't mutable: 'publicReadOnly' setter is inaccessible"
//object.publicReadOnly += 1

object.increment()
print("After increment method call: \(object.publicReadOnly)")

object.decrement()
print("After decrement method call: \(object.publicReadOnly)")

다음은 출력입니다.

  Initial  valule: 10
  After increment method call: 11
  After decrement method call: 10

언급URL : https://stackoverflow.com/questions/25708439/swift-readonly-external-readwrite-internal-property

반응형