美文网首页
POP网络(一)

POP网络(一)

作者: Code_人生 | 来源:发表于2019-08-29 15:07 被阅读0次
    override func viewDidLoad() {
        super.viewDidLoad()
        let request = LGPersonRequest(name: "kody")
        request.send { (person) in
            self.updataUI(person: person!)
        }
       
    }
    
    func updataUI(person:LGPerson){
        imageView.image = UIImage(named: person.iconName)
        nickName.text   = person.name
        ageLabel.text   = person.age
        hobbyLabel.text = person.hobby
        petPhraseLabel.text = person.petPhrase
    }
  • 不同的接口公用一个LGRequest协议
  • 不同的接口对应不同的LGXXXRequest结构体,LGXXXRequest实现LGRequest协议
  • associatedtype Response func parse(data: Data) -> Response? 关联类型,泛型
  • LGXXXRequest关联具体的模型typealias Response = typeparse返回关联的模型type
//LGRequest.swift
import UIKit

enum LGHTTPMethod: String {
    case GET
    case POST
}

protocol LGRequest {
    var host: String { get }
    var path: String { get }
    
    var method: LGHTTPMethod { get }
    var parameter: [String: Any] { get }
    
    associatedtype Response
    func parse(data: Data) -> Response?
}

extension LGRequest {
    func send(handler: @escaping (Response?) -> Void) {
        let url = URL(string: host.appending(path))!
        var request = URLRequest(url: url)
        request.httpMethod = method.rawValue
        // 在示例中我们不需要 `httpBody`,实践中可能需要将 parameter 转为 data
        // request.httpBody = ...
        let task = URLSession.shared.dataTask(with: request) {
            data, response, error in
            if let data = data, let res = self.parse(data: data) {
                DispatchQueue.main.async { handler(res) }
            } else {
                DispatchQueue.main.async { handler(nil) }
            }
        }
        task.resume()
    }
}

struct LGPersonRequest: LGRequest {
    typealias Response = LGPerson
    let name: String
    
    let host = "http://127.0.0.1:5000"
    var path: String {
        return "/pythonJson/getTeacherInfo/?username=\(name)"
    }
    let method: LGHTTPMethod = .GET
    let parameter: [String: Any] = [:]
    
    func parse(data: Data) -> LGPerson? {
        return LGPerson(data: data)
    }
}

//struct LGLoginRequest: LGRequest {
//    typealias Response = type
//    
//}

//struct LGHomeRequest: LGRequest {
//    
//}
  • 模型LGPerson结构体
//LGPerson.swift
import UIKit

struct LGPerson {
    let name: String
    let iconName: String
    let age: String
    let hobby: String
    let petPhrase: String

    init?(data: Data) {
        guard let obj = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any] else {
            return nil
        }
        guard let name = obj["name"] as? String else {
            return nil
        }
        guard let iconName = obj["iconName"] as? String else {
            return nil
        }
        guard let age = obj["age"] as? String else {
            return nil
        }
        guard let hobby = obj["hobby"] as? String else {
            return nil
        }
        guard let petPhrase = obj["petPhrase"] as? String else {
            return nil
        }
        self.name = name
        self.iconName = iconName
        self.age = age
        self.hobby = hobby
        self.petPhrase = petPhrase
    }
}

相关文章

  • POP网络(一)

    不同的接口公用一个LGRequest协议 不同的接口对应不同的LGXXXRequest结构体,LGXXXReque...

  • 各种搞笑的手绘头像图

    [cp]#跟着阿文老师练POP海报字##Deano手绘pop培训##手绘pop海报字体##手绘pop海报网络培训班...

  • push、pop、网络延迟

    一:模拟需求 A界面push到B界面再从B界面push到C界面。具体:程序一开启:显示A界面,在B界面可以点赞 ,...

  • POP网络重构(二)

    模型 结构体LGPerson,扩展了LGDecodable协议,具备了parse能力 associatedtype...

  • 2.14情人节 手绘POP海报

    今天我们来分享几张 2.14情人节手绘POP海报 2020年2月手绘POP海报 在线网络视频直播班开始报名啦! 2...

  • 1 locates a set of elements

    ''' pop() pop() or pop(-1) ://get the default element is ...

  • 《計算機網路概論》——2应用层

    本章要点: 2.1 网络应用的原则 2.2 Web和HTTP 2.3 FTP 2.4 邮件服务:SMTP,POP3...

  • ios 动画效果网址

    一. pop动效库 https://github.com/facebook/pop 使用pop的动效Demo...

  • SSH的工作原理

    SSH简介 传统的网络服务程序,比如FTP,POP,Telnet,本质上都是不安全的,因为它们在网络上用明文传送数...

  • IOS FACEBOOK POP动画详解

    IOS FACEBOOK POP动画详解 POP框架介绍 POP 的架构 架构知识了解下就行 POP 目前由四部...

网友评论

      本文标题:POP网络(一)

      本文链接:https://www.haomeiwen.com/subject/azliectx.html