暂无描述

PhotoItem.swift 7.2KB

    // // PhotoItem.swift // PaiAi // // Created by FFIB on 2017/10/9. // Copyright © 2017年 yb. All rights reserved. // import Foundation import ObjectMapper import RxDataSources extension DateTransform { open func transformFromJSON(_ value: Any?) -> Date? { if let timeInt = value as? Double { return Date(timeIntervalSince1970: TimeInterval(timeInt) / 1000) } if let timeStr = value as? String { return Date(timeIntervalSince1970: TimeInterval(atof(timeStr)) / 1000) } return nil } } struct PhotoItem { var avatar = "" var comment_num = 0 var created_at = "" var create_at: Date? var group_avatar = "" var group_default_avatar = 0 var group_from = 0 var group_id = "" var group_name = "" var nickname = "" var photo_from = 0 var photo_h = 0 var photo_w = 0 var photo_id = "" var photo_thumbnail2_h = 0 var photo_thumbnail2_url = "" var photo_thumbnail2_w = 0 var photo_thumbnail_h = 0 var photo_thumbnail_url = "" var photo_thumbnail_w = 0 var photo_url = "" var photo_share_url = "" var thumbup = false var thumbup_num = 0 var user_id = "" var murl = "" var rurl = "" var porder: [String: String] = [:] var origin_expired_stamps: Double = 0 var time_stamps: Date? var isExpire = true var sizeCache = CGSize(width: 0, height: 0) var display_payment_btn = 0 init(json: [String: AnyObject]) { self.init(map: Map(mappingType: .fromJSON, JSON: json)) } } extension PhotoItem: Mappable { init(map: Map) { mapping(map: map) } mutating func mapping(map: Map) { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" created_at <- map["created_at"] create_at <- (map["created_at"], DateFormatterTransform(dateFormatter:dateFormatter)) avatar <- map["avatar"] comment_num <- map["comment_num"] group_avatar <- map["group_avatar"] group_default_avatar <- map["group_default_avatar"] group_from <- map["group_from"] group_id <- map["group_id"] group_name <- map["group_name"] nickname <- map["nickname"] photo_from <- map["photo_from"] photo_h <- map["photo_h"] photo_w <- map["photo_w"] photo_id <- map["photo_id"] photo_thumbnail2_h <- map["photo_thumbnail2_h"] photo_thumbnail2_url <- map["photo_thumbnail2_url"] photo_thumbnail2_w <- map["photo_thumbnail2_w"] photo_thumbnail_h <- map["photo_thumbnail_h"] photo_thumbnail_url <- map["photo_thumbnail_url"] photo_thumbnail_w <- map["photo_thumbnail_w"] photo_url <- map["photo_url"] photo_share_url <- map["photo_share_url"] thumbup <- map["thumbup"] thumbup_num <- map["thumbup_num"] user_id <- map["user_id"] porder <- map["porder"] display_payment_btn <- map["display_payment_btn"] rurl = porder["r_photo_url"] ?? "" murl = porder["m_photo_url"] ?? "" } } extension PhotoItem: IdentifiableType, Equatable { typealias Identity = String var identity: String { return photo_id } static func == (lhs: PhotoItem, rhs: PhotoItem) -> Bool { return lhs.photo_id == rhs.photo_id } } struct PhotoModel { typealias modelType = PhotoModel var avatar = "" var comment_num = 0 var created_at = "" var create_at = Date() var group_avatar = "" var group_default_avatar = 0 var group_from = 0 var group_id = "" var group_name = "" var nickname = "" var photo_from = 0 var photo_h = 0 var photo_w = 0 var photo_id = "" var photo_thumbnail2_h = 0 var photo_thumbnail2_url = "" var photo_thumbnail2_w = 0 var photo_thumbnail_h = 0 var photo_thumbnail_url = "" var photo_thumbnail_w = 0 var photo_url = "" var photo_share_url = "" var thumbup = false var thumbup_num = 0 var user_id = "" var murl = "" var rurl = "" var porder = [String: String]() var origin_expired_stamps: Double = 0 var time_stamps: Date? var isExpire = true var sizeCache = CGSize(width: 0, height: 0) var display_payment_btn = 0 init(data: [String: AnyObject]) { self.init(map: Map(mappingType: .fromJSON, JSON: data)) } init() { } } extension PhotoModel: Mappable { init(map: Map) { mapping(map: map) } mutating func mapping(map: Map) { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" created_at <- map["created_at"] create_at <- (map["created_at"], DateFormatterTransform(dateFormatter:dateFormatter)) avatar <- map["avatar"] comment_num <- map["comment_num"] group_avatar <- map["group_avatar"] group_default_avatar <- map["group_default_avatar"] group_from <- map["group_from"] group_id <- map["group_id"] group_name <- map["group_name"] nickname <- map["nickname"] photo_from <- map["photo_from"] photo_h <- map["photo_h"] photo_w <- map["photo_w"] photo_id <- map["photo_id"] photo_thumbnail2_h <- map["photo_thumbnail2_h"] photo_thumbnail2_url <- map["photo_thumbnail2_url"] photo_thumbnail2_w <- map["photo_thumbnail2_w"] photo_thumbnail_h <- map["photo_thumbnail_h"] photo_thumbnail_url <- map["photo_thumbnail_url"] photo_thumbnail_w <- map["photo_thumbnail_w"] photo_url <- map["photo_url"] photo_share_url <- map["photo_share_url"] thumbup <- map["thumbup"] thumbup_num <- map["thumbup_num"] user_id <- map["user_id"] porder <- map["porder"] display_payment_btn <- map["display_payment_btn"] rurl = porder["r_photo_url"] ?? "" murl = porder["m_photo_url"] ?? "" let width = (kScreenWidth - 6 * 2 - 5) / 2 let imageTop: CGFloat = 51 let imageBottom: CGFloat = 32 let height = CGFloat(photo_thumbnail_h) / CGFloat(photo_thumbnail_w) * width + imageTop + imageBottom sizeCache = CGSize(width: round(width), height: ceil(height)) } } extension PhotoModel: GroupParsable { static func parse(datas: [String: AnyObject]) -> [PhotoModel] { guard let data = datas["data"] as? [String: AnyObject], let photos = data["photos"] as? [[String: AnyObject]] else { return [PhotoModel]() } return photos.compactMap { return PhotoModel(map: Map(mappingType: .fromJSON, JSON: $0)) } } }