2015-01-07 3 views
0

Objective-C에서이 작업을 수행 할 수 있지만 Swift에서 작동하게하는 방법을 찾는 데 문제가 있습니다. 새로운 엔티티를 만들 때마다 함수를 호출 할 수 있도록 NSManagedObject에 확장 기능을 작성하고 있습니다. 이 함수는 기존 엔티티가 일치하는지 확인한 다음 일치하는 것이 없으면 새 엔티티를 만들고 반환합니다. 일치하는 항목이 있으면 일치 항목을 반환합니다. 여기에 내 코드입니다 :Swift extension on NSManagedObject

extension Chapter { 
    class func createChapter(i_d: Int, team_level: Int, location: String, name: String, school: String, image: UIImage, context: NSManagedObjectContext) -> Chapter { 

     var chapter : Chapter? 

     var request : NSFetchRequest = NSFetchRequest(entityName: "Chapter") 
     request.predicate = NSPredicate(format: "i_d = \(i_d)") 
     var error : NSError? 
     var results : [Chapter] = context.executeFetchRequest(request, error: &error) as [Chapter] 

     if error != nil{ 
      println(error) 
     } else if results.count == 1 { 
      println("Only found one Chapter match for id: \(i_d)") 
      chapter = results.first! 
     } else if results.count > 1 { 
      println("Found multiple Chapters for id: \(i_d)") 
      for chapter in results { 
       println(chapter.name) 
      } 
     } else { 
      chapter = NSEntityDescription.insertNewObjectForEntityForName("Chapter", inManagedObjectContext: context) as? Chapter 
      chapter?.i_d = i_d 
      chapter?.team_level = team_level 
      chapter?.location = location 
      chapter?.name = name 
      chapter?.school = school 
      chapter?.image = UIImagePNGRepresentation(image) 

      var error: NSError? = nil 
      if !context.save(&error) { 
       println("Saving error \(error), \(error?.userInfo)") 
      } else { 
       println("Saved a Chapter with id: \(i_d)") 
      } 
     } 

     return chapter! 
    } 
} 
  • 는 "i_d는"엔티티에 대한 고유 ID입니다

이것은 내가 목표 - C에서 다음과 같이 뭔가를 호출 할 수하기 위해 사용하는 방법이다 (대략 번역) : 장 = Chapter.createChapter (...)는, 엑스 코드는 나에게 또 다른 Chapte 넣을 수 있습니다 : 나는 var에 CHAP 같은 것을 시도 할 때마다

Chapter *chapter = [Chapter createChapterWithID:i_d, team_level:team_level, location:location, name:name, school:school, image:image, context:context]; 

r 객체를 매개 변수 목록에 추가합니다. 반면에 챕터 인스턴스에서 함수를 호출하면 함수 매개 변수가 제대로 채워질 수 있습니다.

어떻게하면 문제를 해결할 수 있습니까?

편집 : 응답 제안에서

, 내 함수 정의 앞에 "클래스"를 넣어뿐만 아니라 제대로 기능 내 최초의 변수를 생성하고 필요한 장소에서 물음표를 추가하여 내 코드를 수정했습니다.

답변

1

편의 init를 대신 만들 수 있습니다. 당신이 Chapter.createChapter을 (수행하려는 경우

http://devmonologue.com/ios/swift/swift-initializers-designated-convenience/

또한, createChapter는 확장의 단지 일반 FUNC에, 클래스 FUNC 있어야합니다) 참고. 따라서 챕터 객체가 클래스가 아닌 객체를 생성 할 것으로 기대합니다.

class func createChapter ... 
+0

확인으로 변경

func createChapter ... 

, 함수가 지금 작동하게하기 전에 "클래스"를 추가. 그러나, 나는 잘못 함수 정의의 시작 부분에 챕터 변수를 선언 할 수 있습니다 생각합니다. 거기에 어떤 조언이 있니? –

+0

다른 질문을하고 관련 코드를 게시하는 것이 좋습니다. 나는 당신이 어떻게 챕터 객체를 초기화했는지 알지 못한다. 그래서 무슨 일이 벌어 지는지 말하기가 어렵다. 나는 또한 당신이 점점 어떤 오류 모르겠어요. 따라서 새로운 질문을하고 모든 관련 코드 및 오류를 게시하십시오. – Aggressor

+0

Nevermind. 그냥 몇 가지와 함께 연주하고 작동하도록했습니다. 나는 그것을 편집으로 올려 놓을 것이다. –