Swift에서 NSManagedObject의 Subclass를 사용할 때 해당 Class 이름에 모듈 이름을 추가하는 Prefix

2055 단어 SwiftCoreData
제목을 그대로 두다
swift에서 CoreData의 NSManagedObject의 Subclass를 제작할 때 @objc(EntityClass) 방법이 있는데 이것에 비해 CoreData의 Enity 정의는
(모듈 이름).(EnityClass 이름)
이렇게 하는 것이 비교적 좋다.

@objc(Enity)를 설치할 때

@objc(Entity)에 더하면 이름 공간이 글로벌(이전 Objective C에서 사용했던) 장소로 바뀔 수 있다.
@objc(ChildEntity)
class ChildEntity: NSManagedObject {
    @NSManaged var identity: String
    @NSManaged var name: String?
    @NSManaged var birthday: NSDate?
    @NSManaged var sex: NSNumber?
    @NSManaged var imageFilename: String?
}
이렇게 쓰면ChildEntity 이 클래스가 정의되고 코어데이터의 설정ChildEntity도 쓰면 됩니다.
그러나 이렇게 되면 이전의 Objective C 코드에서 간혹 ChildEnity라는 Class(또는 인터페이스)를 정의했다면 구축할 수 없을 것 같다(그래서 지금까지 세 글자를 추가했어야 했다).

@objc가 없는 경우

@objc()를 추가하지 않을 경우 CoreData의 모델 정의에 모듈 이름의 Prefix를 추가합니다.다음과 같은 느낌이 듭니다.
class ChildEntity: NSManagedObject {
    @NSManaged var identity: String
    @NSManaged var name: String?
    @NSManaged var birthday: NSDate?
    @NSManaged var sex: NSNumber?
    @NSManaged var imageFilename: String?
}
일반적인 Swift의 Class는 モジュール名.Class名 이름이 있기 때문에 다른 코드와 프로그램 라이브러리와 충돌하지 않습니다. (모듈 이름이 같지 않으면...)
일반적으로 모듈 이름은 Project의 Target 이름입니다.

어느 것이 좋아요?


나는 @objc()를 넣지 않는 것이 좋다고 생각한다.
  • 모듈 이름의 Prefix를 모델 정의에 쓰는 것은 좀 번거롭지만 그렇게 간단하지는 않다
  • 이름 충돌 위험 방지

  • 사용@objc방법은 때로는 좋지 않을 수도 있지만, 덧붙이지 않는 방법으로 해결된다(이것은 일시적인 문제일 수도 있다).
  • 좋은 웹페이지 즐겨찾기