import Foundation
import Moya
let DoubanProvider = MoyaProvider<Douban>()
public enum Douban {
case channel
case playlist(String)
}
extension Douban: TargetType {
public var baseURL: URL {
switch self {
case .channel:
return URL(string: "https://www.douban.com")!
case .playlist(_):
return URL(string: "https://douban.fm")!
}
}
public var path: String {
switch self {
case .channel:
return "/j/app/radio/channels"
case .playlist(_):
return "/j/mine/playlist"
}
}
public var method: Moya.Method {
return .get
}
public var task: Task {
switch self {
case .channel:
return .requestPlain
case .playlist(let channel):
var params: [String: Any] = [:]
params["channel"] = channel
params["type"] = "n"
params["from"] = "mainsite"
return .requestParameters(parameters: params, encoding: URLEncoding.default)
}
}
public var headers: [String : String]? {
return nil
}
}
4. 涉及单个view内容部分
SongPresenter.swift
import Foundation
import SwiftyJSON
protocol SongDelegate: NSObject {
func getCurrentData()
}
class SongPresenter: NSObject {
weak var delegate: SongDelegate?
var songDetail: FMSong?
func attach(_ delegate: SongDelegate) {
self.delegate = delegate
}
func dettach() {
self.delegate = nil
print("SongPresenter释放")
}
}
extension SongPresenter {
func getSongData(channelID: String) {
DoubanProvider.request(.playlist(channelID)) { result in
switch result {
case let .success(response):
let data = response.data
let json = try! JSON(data: data)
let song = FMSong.init(jsonData: json)
self.songDetail = song
print("success")
self.delegate?.getCurrentData()
case let .failure(error):
print("errror\(error)")
}
}
}
}
SongViewController.swift
import UIKit
import Kingfisher
class SongViewController: UIViewController {
@IBOutlet weak var bigTitle: UILabel!
@IBOutlet weak var songImageView: UIImageView!
@IBOutlet weak var songTitle: UILabel!
@IBOutlet weak var artist: UILabel!
public var channelID: String?
private let presenter = SongPresenter()
override func viewDidLoad() {
super.viewDidLoad()
presenter.attach(self)
guard let channelID = channelID else {
return
}
presenter.getSongData(channelID: channelID)
}
}
extension SongViewController: SongDelegate {
func getCurrentData() {
if let songDetail = presenter.songDetail {
bigTitle.text = songDetail.bitTitle
songImageView.kf.setImage(with: URL(string: songDetail.songImg ?? ""))
songTitle.text = songDetail.song
artist.text = songDetail.singer
}
}
}