2016-08-19 6 views
2

저는 스위프트/IOS 초보자입니다. CoreData에 대해 간단히 이해할 수있는 부분이 있습니다.스위프트 : NSManagedObject를 상속하면 왜 내 속성이 손상됩니까?

클래스에는 지정된 초기화 프로그램으로 초기화되는 일부 비 속성 속성이 있습니다. 갑자기 다음 NSManagedObject에서 상속하는 클래스를 설정하면 그 다음, 나는 그들이 분명히에도 불구하고, 오류 내 속성이 초기화되지 않은 이유는 스위프트가 갑자기 생각합니까

Stored property X requires an initial value or should be @NSManaged. 

거야?

또한 @NSManaged는 "속성의 저장 및 구현이 CoreData에서 처리된다는 것을 컴파일러에 알려주지 만 그 의미는 무엇입니까?

주시면 감사하겠습니다 어떤 답변을 ..

+0

핵심 데이터 스택 및 모델의 다른 부분을 추가 했습니까? 왜이 클래스를 관리 객체로 지정 하시겠습니까? – Wain

답변

2

사실은 그냥 어제 읽고 있었다.

예, 실제로는 @dynamic처럼 작동합니다. 기술적으로는 일 수도 있습니다. 의미 상으로 약간의 차이가 있습니다 :

@dynamic은 '컴파일러, 내 속성이 구현되어 있는지 확인하지 않습니다. . 이 당신이 볼 수있는 코드 수 없습니다하지만 런타임에 작동이 을 보장 할 수있는 내가 구현 돌봐 코어 데이터를 가지고 컴파일러는 이러한 속성을 확인하지 않는 '

지금 @NSManaged은 말한다'-는 것 런타임 '너무

에가 그럴 수도 말 : @NSManaged이 question

에서 촬영

: 동적보다 좁은 버전 문법 설탕입니다

신속한 대대적 인 추진은이 경우와 마찬가지로 속성을 컴파일 할 때 구현되는지 확인하는 등 언어를 매우 안전하게 유지하는 것이 었습니다. 내가 올바르게 이해한다면, CoreData는 이러한 컴파일 시간 검사를 제대로 따르지 않으므로, @NSManaged을 추가하면 컴파일러가 변수가 처리된다는 것을 알 수 있습니다. Apple에서

는 :

당신은 코어 데이터가 런타임에 선언의 저장 및 구현을 제공 스위프트 컴파일러를 알리기 위해 @NSManaged 속성을 사용합니다.

+0

나는 짧은 주석을 썼지 만 그것을 삭제했다.이 작은 Swift oddities는 천천히 가라 앉기 시작했다. 그래서 NSManagedObject는 서브 클래스가 속성이 서브 클래스에 실제로 구현되었는지를 판단하지 못하게한다. 이 경고를 유발하는 것이 속성이 구현된다는 점을 고려하면 이상합니다. 좋아, 그래서이 속성들을 @NSManaged로 설정한다고 해보자. 그 밖의 무엇을해야합니까? 그의 모든 사건은 말도 안되고 그 속성이 실제로 구현되었다는 것을 감안할 때 "런타임에이 속성들을 어떻게 구현합니까?" :-) – user884248

+0

나는 그것이 신속한 컴파일러가 옵션을 처리하는 방법과 관련이 있다고 생각한다.Swift는 타입 안전 언어이며, CoreData 스택은 여전히 ​​기술적으로 타입이 안전하지 않은 obj-c에 있고, @ NSManaged는이 두 세계를 연결하는 방법입니다. 이것은 내 이해이지만, 내 자신보다 훨씬 똑똑한 사람의 검증을 좋아할 것입니다. – random

+0

구현에 대한 오해가있을 수 있습니다. 선언 된 변수가 구현되었음을 의미하지는 않습니다. 신속한 컴파일러는 변수를 살펴볼 때 선택적이거나 설정되어야합니다. 둘 중 하나. 'NSMangedObject' 서브 클래스는 타입 안전하지 않은 obj-c베이스로부터 상속 받기 때문에 상자 밖에서 그 능력을 가지지 않습니다. @ NSManaged 특성을 사용하여 코어 데이터가 런타임에 선언의 저장 및 구현을 제공한다는 것을 Swift 컴파일러에 알립니다. @ user884248 희망이 도움이됩니다! – random