의 우리가이 같은 객체를 정의한다고 가정 해 봅시다 :이 예를 들어Swift에서 setValueForKey를 사용하여 객체의 textAlignment 속성을 설정하는 방법은 무엇입니까?
let object: AnyObject = {
var result = UILabel(frame: CGRect(x: 0, y: 0, width: 150, height: 50))
result.text = "First Text"
result.backgroundColor = UIColor.blueColor()
return result
}()
, 내가 명시 적으로 UILabel
을 만들어,하지만 내 실제 프로젝트에서 내가 만든 어떤 객체의 방식을 모르는, 그래서 난 그냥 해요 이 예에 대해 결과를 AnyObject
으로 처리하십시오. 객체는 파란색 배경에 "First Text"텍스트가있는 표준 UILabel이며 기본값은 왼쪽에 맞춰져 있습니다. 이 예제의 경우
UILabel
것을 알고, 그래서 내가이 같은 특성을이다 변경할 수 있습니다 알고
(object as UILabel).text = "Second Text"
을 그리고 지금은 텍스트를 변경했습니다. 그러나 내 실제 프로젝트에서 내 개체가 UILabel
이라는 것을 알지 못하므로 (object as UILabel)
트릭을 수행 할 수 없습니다. 왜냐하면 항상 UILabel
이 아니기 때문입니다. 내 주위에 setValueForKey
을 사용하고 있습니다. 내 개체 (이 예에서는 도시하지 않음) respondsToSelector
를 사용하여 "텍스트"라는 멤버가 있음을 확인한 후, 나는 텍스트 이런 식으로 변경할 수 있습니다 : 이제
object.setValue("Third Text", forKey: "text")
을 나는 개체의 textAlignment
을 변경하고자한다면,
object.setValue(NSTextAlignment.Center, forKey: "textAlignment")
수행이 비록 오류가 발생합니다 :
Type 'NSTextAlignment' does not conform to protocol 'AnyObject'
객체가 실제로 회원이
textAlignment
라는이 않음을 확인한 후, 나는 같은 것을 할 싶어
CGRect
유형을 좋아하지 않았기 때문에 frame
을 설정하여이 접근 방식을 시도하는 동안 비슷한 점이 있었지만 CGRect
을 NSValue
으로 변환하여 해결할 수있었습니다. 그러나 NSTextAlignment
과 같은 enum
유형의 문제를 해결할 수있는 방법을 찾을 수 없습니다.
아무도 내 목표를 달성 할 수있는 방법을 알고 있습니까?
이것은 완벽합니다! 나는 rawValue를 조금 보았지만, 나는 이것을 사용할 수 있다는 것을 깨닫지 못했다. 나는 그것을 사용하여'NSTextAlignment'를 호출하려했지만, 바로 enum을 setValueForKey에 넘기는 위치로 떨어지고있었습니다. 이것은 완벽하게 작동했습니다. –