2012-05-26 2 views
4

요즘 C 중괄호를 사용하여 C Structs 값을 설정 한 것이 나왔지만 훌륭하게 작동하지만 왜 설정에 사용할 수 없는지 궁금합니다. 특성 값?왜 {}가 C 구조체에 대해 작동하지만 속성에는 적용되지 않습니다.

//This works: 
CGPoint pt = {10, 20}; 
CGRect rct = {0, 5, 50, 50}; 

//But this doesn't: 
self.frame = {0, 5, 50, 50}; 
imageview.center = {100, 120}; 

컴파일러 오류가 나는이 작동하지 않는 이유를 알 것 "예상 표현"

,하지만 난 더 철저하게 설명을하고 싶습니다.

답변

7

첫 번째 라인은 선언과 변수의 초기화를 결합합니다. 컴파일러는 왼쪽 식의 형식에서 올바른 식의 형식을 유추하고 구조체 슬롯에 숫자를 예상대로 배포합니다.

그러나 마지막 줄은 초기화 작업이 아닙니다. 이제 컴파일러는 아무 것도 추론하지 않습니다. 결과적으로 컴파일러는 오른쪽에있는 내용을 어떻게 해석해야하는지 알지 못합니다. 그 유형은 무엇입니까, 어떻게 그 숫자를 메모리에 배치합니까? 컴파일러는 CGrect 또는 CGPoint를 가정하지 않으며 사용자에게 누락 된 정보를 제공하는 명시 적 형변환 (CGRect) {0,5,50,50}을 도와야합니다.

+0

의미가 있습니다. 감사 – daveMac

3

이 작동합니다 :

self.frame = (CGRect){0, 5, 50, 50}; 
imageview.center = (CGPoint){100, 120}; 
관련 문제