swift_관찰자 모드
swift에서 KVO를 사용하는 것은 OC보다 약간 제한적입니다.
상기 두 가지 조건은 이전에 OC에서 KVO를 사용하여 특정한 매거 속성의 type의 변화를 관찰했기 때문에 swift에서는 통하지 않는다. 물론 swift의 구조체와 범형도 포함한다.
다음은 swift에서 kvo를 실현하는 것을 보겠습니다.
사용자 정의 클래스
import UIKit
class FLObbserve: NSObject {
dynamic var name:String? //dynamic runtime
override init() {
name = "123"
super.init()
addObserver(self, forKeyPath: "name", options: .new, context: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
print("kvo is valid")
}
deinit {
removeObserver(self, forKeyPath: "name")
}
}
실행 후 외부 수정
name
속성, 콘솔 인쇄 결과: kvo is valid
이로써 상기 두 가지 조건을 실현한 후 사용자 정의 클래스에 kvo를 추가했다.그러면 Struct, Enum 값 유형의 관찰자 모드는 어떻게 실현됩니까?여기서 우리는 하나의 속성 관찰기의 개념을 도입해야 한다. Swift에서 하나의 속성에 속성 관찰기를 설정할 수 있다. 이것은 내장된 KVO 관찰이라고 할 수 있지만 자신의 속성에 대한 관찰에만 국한된다.코드 보기:
//MARK:
var direction:Direction {
willSet{ // direction
}
didSet { // direction
changeDirection(direction: direction)
}
}
여기서
Direction
는 사용자 정의 열거 속성 관찰기가 초기화가 완료된 후에만 터치하고 NSObject의 하위 클래스에 국한되지 않으며 Swift의 모든 Class, Struct, Enum에서 사용할 수 있다.여기서 Array, Dictionary, Set 등 값 유형은 그 내용에 대한 수정(증가/삭제/교체) 요소도 속성 관찰기를 촉발한다.Array, Dictionary, Set 등 값 유형이 바뀌면 새로운 내용을 변수로 복사하고 변수의 주소도 바뀌기 때문이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.