Alamofire类型的表达是模糊的,没有更多的上下文

时间:2015-11-22 15:08:57

标签: json xcode swift get alamofire

我知道同一主题有多个问题,但我的问题和那些问题之间的差异似乎是定义参数。甚至更奇怪的是代码会在我的iPhone上构建和安装,直到昨天。

这是Xcode抱怨的地方

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)
    }
}

这是整个班级

string input = "this is just a simple text string";
char[] chars = { 't', 's' };
var array = input.Split();
List<string> result = new List<string>();
foreach(var word in array)
{
    bool isValid = true;
    foreach (var c in chars)
    {
        if (!word.Contains(c))
        {
            isValid = false;
            break;
        }
    }
    if(isValid) result.Add(word);
}

非常感谢任何帮助,谢谢。

编辑:我通过更改LocItemsWrapper摆脱了错误?到LocItemsWrapper!但现在我有一个错误,说不明确地使用.responseLocItemsArray ......

1 个答案:

答案 0 :(得分:0)

Xcode试图告诉你,它无法弄清楚要使用哪个.responseLocItemsArray,请检查所有其他类,看看你是否在其他地方使用过它。