2014-07-10 2 views
11

Objective-C의 핵심 데이터를 사용하는 프로젝트를 Swift로 변환하려고합니다.Nil 인수로 Swift에서 NSPredicate를 사용할 수 있습니까?

데이터 모델은 다른 폴더를 포함하는 하나의 마스터 폴더를 가지며 "parentFolder"관계를 통해 다른 폴더를 포함 할 수 있도록 구성되어 있습니다. 현재

, 나는 (그것이 "parentFolder"없는 유일한 폴더를 찾아 내고, 예상대로 작동) 마스터 폴더를 검색하는 데 목표 - C에서이 작업을 수행 :

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:"Folder"]; 
request.predicate = [NSPredicate predicateWithFormat:@"parentFolder == %@", nil]; 

스위프트로 전환, 난 ' 같은 일을 수행하고 싶습니다 :

let request = NSFetchRequest(entityName: "Folder") 
request.predicate = NSPredicate(format: "parentFolder == %@", nil) 

을 ...하지만 컴파일러는 "누락 인수 레이블 불만 'argumentArray'. 호출 (나는 생각으로 혼란 것으로 보인다 나는 자 NSPredicate를 (사용해야 형식 : 대신 argumentArray :) 메서드

스위프트에서 올바른 방법이 있습니까?

답변

26

가변 인수 목록에 nil을 전달하는 것이 (현재 Xcode 6 베타 3 릴리스로) 일반적으로 어려울 것으로 보입니다. 감사합니다,

let predicate = NSPredicate(format: "parentFolder == %@", 0) 
print(predicate) 
// Output: parentFolder == nil 

을하지만 쉬운 솔루션은 단순히 "가장 쉬운 해결책은"완벽하게 작동

NSPredicate(format: "parentFolder == nil") 
+1

로 술어를 작성하는 것입니다 :이

가 작동 보인다 당신! –

0
extension NSPredicate { 

    convenience init?(attribute: String?, value: AnyObject?) { 
     guard let attribute = attribute else { 
      return nil 
     } 
     self.init(format: "%K == %@", argumentArray: [attribute, (value ?? "nil")]) 
    } 

} 
관련 문제