2014-10-22 5 views
8

Swift에서 클래스의 속성에 대한 getter/setter 함수 쌍을 자동으로 생성하는 방법이 있습니까? 하스켈에있는 렌즈 라인을 따라 뭔가.렌즈를 Swift 속성

내가 수동으로 다음을 수행 할 수있었습니다 :

class PropertyLens<U, T> { 
    let getter: U -> T 
    let setter: (U, T) ->() 

    init(getter: (U -> T), setter: ((U, T) ->())) { 
     self.getter = getter 
     self.setter = setter 
    } 

    func get(u: U) -> T { 
     return getter(u) 
    } 

    func set(u: U, t: T) { 
     setter(u, t) 
    } 
} 
// ... 
let myPropertyLens = PropertyLens<MyClass, Int>(getter: { $0.myProperty }, setter: { $0.myProperty = $1 }) 

그러나, 즉, 자세한 지루한, 그리고 더 많은되고 오류가 발생하기 쉬운 내가 좋아하는 것보다. 누락 된 내장 기능이 있습니까?

+1

목표는 무엇입니까? 내가 아는 한 하스켈의 렌즈는 스위프트가 이미 포함하고있는 변경 가능한 상태를 허용하도록 설계되었습니다. 'willSet'과'didSet' 핸들러와 계산 속성 사이에는 많은 유연성이 있습니다. –

+3

내 목표는이 렌즈를 다른 객체에 전달하여 속성을 조작 할 수있게하는 것입니다. 현재 프로젝트에서는 표보기 셀을 생성하고 프레스에 표준 방식으로 응답하는 객체입니다. 하스켈의 렌즈는 데이터 구조를 질의하고 조작 할 수있는 구성 가능한 방법을 제공하는 것만큼이나 가변성에 대한 환상은 아니지만 가변성에 대한 환상이 그들로부터 나온다. –

+0

ObjC 방법은 문자열 keypath를 전달하지만 형식 안전은 없습니다 –

답변

0

답을 위해, 지금까지 (1.1) 언어 구성은 사용자가하고있는 것을 대신 할 수 없습니다 (저장된 속성의 액세스 프로세스를 참조 가능한 객체로 래핑).

의견에 대해서는 귀하의 코드가 기본 변수 만 사용하는 것처럼 보입니다. 공개 변수는 기본 캡슐화 규칙을 어기면 좋지 않습니다. 맞습니까?

관련 문제