2015-01-22 2 views
0

'으로 변환 할 수 없습니다. 배열은 PFObjects이고 모든 배열의 이름은 restaurantNames 인 새 배열을 만들었습니다. 지금은 UIPageView에 이름을 인쇄하기 위해 노력하고있어,하지만 난이 오류가 발생합니다 :'Int'는 '<Int>

'Int' is not convertible to 'Range<Int>' 

코드 :

private func getItemController(itemIndex: Int) -> PageItemController? { 

    let restaurantNames = finalRestaurantArray.map { $0.objectForKey("Name") } 

    if itemIndex < finalRestaurantArray.count { 
     let pageItemController = self.storyboard!.instantiateViewControllerWithIdentifier("ItemController") as PageItemController 
     pageItemController.itemIndex = itemIndex 
     pageItemController.restaurantName = restaurantNames[itemIndex] 
     //pageItemController.imageName = finalRestaurantArray[itemIndex] 
     return pageItemController 
    } 

    return nil 
} 

실제 PFObject 배열 (restaurantNames 그냥 이름의 배열을 포함)과 같다 :

[<Restaurant: 0x7feb9252cfc0, objectId: LA74J92QDA, localId: (null)> { 
    Name = "Restaurant 1";   
    City = "New York"; 
    Closed = 1; 
    Country = "United States"; 
    FoodType = Japanese; 
}, <Restaurant: 0x7feb926afa00, objectId: 0aKFrpKN46, localId: (null)> { 
    Name = "Restaurant 2";   
    City = "San Francisco"; 
    Closed = 1; 
    Country = "United States"; 
    FoodType = Italian; 
}] 

페이스트 빈 : http://pastebin.com/U63TFMRV

+0

'println'은 어디에 있나요? 질문에 해당 코드를 추가하십시오. 질문에 restaurantNames의 println을 추가하십시오. – zaph

+0

아마도이 경우 문제와 관련이 없지만 'finalRestaurantArray [itemIndex] [ "Name"]'을 사용하지 않는 것이 좋습니다. 페이지를 만들 때마다 이름 배열을 다시 작성하는 것보다 훨씬 효율적입니다. –

+1

그리고 어떤 줄에 오류가 발생합니까? –

답변

2

이 L

let restaurantNames = finalRestaurantArray.map { $0.objectForKey("Name") } 

이 컴파일러가 처리 할 수있는 어렵기로 악명 인 [AnyObject?]을 만들고, 당신이 얻을 오류는 종종 (때문에 다양한 프로모션 및 과부하) 혼동 : 오프라인 컴파일러에 혼란된다.

1 단계는 가능한 경우 AnyObject을 피해야한다는 것입니다. 따라서 finalRestaurantArray[AnyObject]이 아닌 실제 객체의 배열이거나 심지어 사전이어야합니다. 그런 다음지도가 [String]을 반환 할 것이라고 생각합니다.

당신

다음과 같은 장소에이를 해킹 할 수 : 아무것도 잘못되면

// Avoid this 
let restaurantNames = finalRestaurantArray.map { $0.objectForKey("Name") as String } 

, 그것은 충돌 것입니다. 그러지 마. 가능한 한 빨리 AnyObject에서 데이터를 가져와 (가능한 한 빨리 Dictionary에서 꺼내십시오.) 값을 반환 할 수있는 실제 모델 객체로 변환하십시오.

+0

. 이것은 정말로 도움이되었습니다. 나는 단지 명확하고 싶었다. 이 문제에 대한 좋은 해결책을 제시 한 코드가 있습니까? (당신의 코멘트는 이것을 피한다고 말하기 때문에) :'let String = "string"으로하지 말아라. – Onichan

+0

; 그것은 당신 언젠가 충돌 할 것입니다. 데이터를 저장할 Restaurant 구조체를 만듭니다. 입력 데이터가 무엇이든 (현재'AnyObject'에있는 것이 무엇이든지) 초기화하십시오. –

+0

그래서'[AnyObject]'를'[PFObject]'로 변환 한 다음 맵을 사용하여'[String]'을 반환해야합니까? 나는'[AnyObject]'를'[PFObject]'로 다운 캐스팅하는 방법을 찾으려고했지만 정확한 해결책을 찾지 못했습니다. – Onichan