json - 使用 Alamofire JSOn 和 HTML 创建通用 getter

标签 json swift alamofire

我正在尝试启动一个基于网络抓取的项目。我已经为不同的 JSON 平台设置了工具,我使用 SwiftyJSON,对于原始 HTML,我使用 hpple。我的问题是我正在尝试为内容设置一些通用类,为内容的 getter 设置一些通用类。由于每个操作都是这样,

登录 如果有用户名或密码,请提供。 如果它有验证码显示并使用结果 使用 Alamofire 获取数据 使用 JSON 或 HTML 抓取数据 填充内容类。

我想知道是否有一种方法可以定义某种协议(protocol)、枚举或通用模板,以便我可以为每个类定义那些不同的函数。我想如果我做不到这一点,我会一遍又一遍地编写相同的代码。这就是我想出的。如果您能帮助我正确设置,我将不胜感激。

enum Company:Int {
    case CNN
    case BBC
    case HN
    case SO 
    
    var captcha:Bool {
        switch self {
        case CNN:
            return false
        case BBC:
            return true
        case HN:
            return true
        case SO:
            return false
        }
    }
    var description:String {
        get {
            switch self {
            case CNN:
                return "CNN"
            case BBC:
                return "BBC"
            case HN:
                return "Hacker News"
            case SO:
                return "Stack Overflow"
            }
        }
    }
}

class Fetcher {
    var username:String?
    var password:String?
    var url:String
    var company:Company
    
    init(company: Company, url:String) {
        self.url = url
        self.company = company
    }
    
    init(company: Company, url:String,username:String,password:String) {
        self.url = url
        self.company = company
        self.username = username
        self.password = password
    }
    
    func login() {
        
        if username != nil {
           // login
        }
        if company.captcha {
            //show captcha
        }
    }
    
    func fetch(){
        
    }
    
    func populate() {
        
    }
}

class CNN: Fetcher {
    
    
}

最佳答案

这是我使用 alamofire 和 alamofire 对象映射器所做的: 第 1 步:创建符合 Mappable 协议(protocol)的模态类。

class StoreListingModal: Mappable {
var store: [StoreModal]?
var status: String?
required init?(_ map: Map){

}

func mapping(map: Map) {
    store <- map["result"]
    status <- map["status"]
}
}

第 2 步:使用通用类型创建提取请求:

func getDataFromNetwork<T:Mappable>(urlString: String, completion: (T?, NSError?) -> Void) {
    Alamofire.request(.GET, urlString).responseObject { (response: Response<T, NSError>) in
        guard response.result.isSuccess else{
            print("Error while fetching: \(response.result.error)")
            completion(nil, response.result.error)
            return
        }
        if let responseObject = response.result.value{
            print(responseObject)
            completion(responseObject, nil)
        }
    }
}

第 3 步:现在您只需调用此获取函数即可。这可以像这样完成:

self.getDataFromNetwork("your url string") { (userResponse:StoreListingModal?, error) in

    }

你不仅会得到你的响应对象,它还会被映射到你的模态类。

关于json - 使用 Alamofire JSOn 和 HTML 创建通用 getter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29008961/

相关文章:

mysql - 将json字符串插入mysql

swift - 如何更改文本 - swift 在 UIAlertAction 中向左对齐

ios - 在 iOS 应用程序上发送 MIDI 信息时出现问题

swift - 将 Alamofire 响应与字符串进行比较

ios - 如何使用 Swift 在 Alamofire 函数中返回 true/false?

javascript - For Loop on array from dynamic API in JSON format within template literals

ios - 如何在ios swift中根据ID读取本地json文件?

javascript - 需要循环遍历特定 json 数据格式的帮助

xcode - 使测验应用程序不重复随机问题

ios - 如何使用 Alamofire swift 3 从这个 JSON 中获取值