Mea*_*her 0 json swift alamofire
我正在尝试基于网络报废启动一个项目.我已经为JSON的不同平台设置了工具我使用SwiftyJSON,而对于原始HTML我使用了hpple.我的问题是我正在尝试为内容设置一些泛型类,并为内容的fetcher设置一些泛型类.因为每个操作都是这样的,
登录如果有用户名或密码提供它.如果它具有验证码显示并使用结果使用Alamofire Scrap获取数据,则可以使用JSON或HTML填充内容类.
我想知道是否有办法定义某种协议,枚举或通用模板,以便每个类我可以定义这些不同的功能.我想如果我做不到这一点,我会一遍又一遍地编写相同的代码.这就是我想出的.如果你能帮助我正确设置,我将不胜感激.
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 {
}
Run Code Online (Sandbox Code Playgroud)
以下是我使用alamofire和alamofire对象映射器所做的事情:第1步:创建符合Mappable协议的模态类.
class StoreListingModal: Mappable {
var store: [StoreModal]?
var status: String?
required init?(_ map: Map){
}
func mapping(map: Map) {
store <- map["result"]
status <- map["status"]
}
}
Run Code Online (Sandbox Code Playgroud)
第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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
第3步:现在您只需要调用此获取功能.这可以这样做:
self.getDataFromNetwork("your url string") { (userResponse:StoreListingModal?, error) in
}
Run Code Online (Sandbox Code Playgroud)
您不仅会获得响应对象,还会将其映射到您的模态类.
| 归档时间: |
|
| 查看次数: |
838 次 |
| 最近记录: |