2015-11-22 4 views
2

Я знаю, что у вас много вопросов с одной и той же темой, хотя разница между моим вопросом и тем, по-видимому, является определяющими параметрами. Еще более странно, что код будет строить и устанавливать на моем iPhone до вчерашнего дня.Тип выражения Alamofire неоднозначен без дополнительного контекста

Это где Xcode жалуется

private class func getLocItemsAtPath(path: String!, completionHandler: (LocItemsWrapper?, NSError?) -> Void) { 
    Alamofire.request(.GET, path!) 
     .responseLocItemsArray { response in 
      if let error = response.result.error 
      { 
       completionHandler(nil, error) 
       return 
      } 
      completionHandler(response.result.value, nil) 
    } 
} 

Вот весь класс

import Foundation 
import Alamofire 
import SwiftyJSON 

enum LocItemFields: String { 
    case Name = "name" 
    case LocationBackground = "locationBackground" 
    case Logo = "logo" 
    case Status = "status" 
    case Company = "company" 
    case Id = "id" 
    case Url = "url" 
} 

class LocItemsWrapper { 
    var locItems: Array<LocItems>? 
    var count: Int? 
    private var next: String? 
    private var previous: String? 
} 

class LocItems { 
    var idNumber: Int? 
    var name: String? 
    var locationBackground: String? 
    var logo: String? 
    var status: String? 
    var company: String? 
    var id: String? 
    var url: String? 

    required init(json: JSON, id: Int?) { 
     //print(json) 
     self.idNumber = id 
     self.name = json[LocItemFields.Name.rawValue].stringValue 
     self.locationBackground = json[LocItemFields.LocationBackground.rawValue].stringValue 
     self.logo = json[LocItemFields.Logo.rawValue].stringValue 
     self.status = json[LocItemFields.Status.rawValue].stringValue 
     self.company = json[LocItemFields.Company.rawValue].stringValue 
     self.id = json[LocItemFields.Id.rawValue].stringValue 
    } 

    // MARK: Endpoints 
    class func endpointForLocItems(long: Double!, lat: Double!) -> String { 
     return Constants.getLocLoadListUrl() + "/" + String(long) + "/" + String(lat) + "/0" 
    } 

    private class func getLocItemsAtPath(path: String!, completionHandler: (LocItemsWrapper?, NSError?) -> Void) { 
     Alamofire.request(.GET, path!) 
      .responseLocItemsArray { response in 
       if let error = response.result.error 
       { 
        completionHandler(nil, error) 
        return 
       } 
       completionHandler(response.result.value, nil) 
     } 
    } 

    class func getLocItems(long: Double, lat: Double, completionHandler: (LocItemsWrapper?, NSError?) -> Void) { 
     getLocItemsAtPath(LocItems.endpointForLocItems(long,lat: lat), completionHandler: completionHandler) 
    } 

    class func getMoreLocItems(wrapper: LocItemsWrapper?, completionHandler: (LocItemsWrapper?, NSError?) -> Void) { 
     if wrapper == nil || wrapper?.next == nil 
     { 
      completionHandler(nil, nil) 
      return 
     } 
     getLocItemsAtPath(wrapper!.next!, completionHandler: completionHandler) 
    } 
} 

extension Alamofire.Request { 
    func responseLocItemsArray(completionHandler: Response<LocItemsWrapper, NSError> -> Void) -> Self { 
     let responseSerializer = ResponseSerializer<LocItemsWrapper, NSError> { request, response, data, error in 
      guard error == nil else { 
       return .Failure(error!) 
      } 
      guard let responseData = data else { 
       let failureReason = "Array could not be serialized because input data was nil." 
       let error = Error.errorWithCode(.DataSerializationFailed, failureReason: failureReason) 
       return .Failure(error) 
      } 

      let JSONResponseSerializer = Request.JSONResponseSerializer(options: .AllowFragments) 
      let result = JSONResponseSerializer.serializeResponse(request, response, responseData, error) 

      switch result { 
      case .Success(let value): 
       let json = SwiftyJSON.JSON(value) 
       let wrapper = LocItemsWrapper() 
       wrapper.next = json["next"].stringValue 
       wrapper.previous = json["previous"].stringValue 
       wrapper.count = json["count"].intValue 

       var allLocItems:Array = Array<LocItems>() 
       //print(json) 
       let results = json["rows"] 
       //print(results) 
       for jsonLocItems in results 
       { 
        //print(jsonLocItems.1) 
        let locItems = LocItems(json: jsonLocItems.1, id: Int(jsonLocItems.0)) 
        allLocItems.append(locItems) 
       } 
       wrapper.locItems = allLocItems 
       return .Success(wrapper) 
      case .Failure(let error): 
       return .Failure(error) 
      } 
     } 

     return response(responseSerializer: responseSerializer, 
      completionHandler: completionHandler) 
    } 
} 

Любая помощь будет принята с благодарностью, спасибо.

EDIT: Я избавился от ошибки, изменив LocItemsWrapper? to LocItemsWrapper! но теперь у меня есть ошибка, говорящая о двусмысленном использовании .responseLocItemsArray ...

ответ

0

Xcode пытается сказать вам, что он не может определить, какой .responseLocItemsArray использовать, проверить все ваши другие классы, чтобы узнать, используете ли вы его в любом месте остальное.

+0

Это исправлено, спасибо вам большое – newbiedev

Смежные вопросы