DolphinEnglishLearnStudent/Models/CommonModel.swift
@@ -258,9 +258,28 @@ var updateBy: String = "" var updateTime: String = "" var week: Int = 0 var answerCount = 0 var answerIntegral = 0 var answerTime = 0 var time = 0 var count = 0 } class Listen1SubModel:HandyJSON{ class Listen1SubModel:HandyJSON,Hashable{ static func == (lhs: Listen1SubModel, rhs: Listen1SubModel) -> Bool { return lhs.id == rhs.id } // var hashValue: Int{ // return id // } func hash(into hasher: inout Hasher) { } required init() {} @@ -277,6 +296,10 @@ var type: String = "" var updateBy: String = "" var updateTime: String = "" //游戏类型2专用 var isOpen:Bool = false } struct Listen4Model:HandyJSON{ DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_CCell.swift
@@ -12,6 +12,7 @@ @IBOutlet weak var view_container: UIView! @IBOutlet weak var view_top: UIView! @IBOutlet weak var img_state: UIImageView! @IBOutlet weak var img_cover: UIImageView! override func awakeFromNib() { super.awakeFromNib() @@ -39,6 +40,10 @@ } } func setModel(_ m:Listen1SubModel){ img_cover.sd_setImage(with: URL(string: m.img)) } override func layoutSubviews() { super.layoutSubviews() view_top.jq_addCorners(corner: [.topLeft,.topRight], radius: 8) DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_CCell.xib
@@ -27,7 +27,7 @@ <constraint firstAttribute="height" constant="40" id="E9b-fE-KSJ"/> </constraints> </view> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="qVZ-4r-nXX"> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="qVZ-4r-nXX"> <rect key="frame" x="0.0" y="40" width="155" height="160"/> </imageView> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="NUh-6J-pQi"> @@ -69,6 +69,7 @@ </constraints> <size key="customSize" width="165" height="210"/> <connections> <outlet property="img_cover" destination="qVZ-4r-nXX" id="fI2-K0-BPL"/> <outlet property="img_state" destination="dMD-2P-QwE" id="asa-h2-2Ut"/> <outlet property="view_container" destination="YTs-C9-W1k" id="SRu-Wj-Ued"/> <outlet property="view_top" destination="Mmn-Bf-5Vy" id="Pdc-oD-g5f"/> DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_Pocket_CCell.swift
@@ -9,17 +9,27 @@ class ListenFight_Game_Pocket_CCell: UICollectionViewCell { private lazy var mask_img:UIImageView = { lazy var mask_img:UIImageView = { let image = UIImageView(image: UIImage(named: "bg_card")) return image }() private lazy var answer_img:UIImageView = { lazy var answer_img:UIImageView = { let image = UIImageView() image.jq_cornerRadius = 10 image.backgroundColor = .red return image }() lazy var voice_view:UIView = { let voiceView = UIView() voiceView.backgroundColor = UIColor(hexString: "#41A2EB") voiceView.jq_cornerRadius = 10 return voiceView }() private var model:Listen1SubModel! override init(frame: CGRect) { @@ -34,14 +44,60 @@ make.edges.equalToSuperview() } let mask_tap = UITapGestureRecognizer(target: self, action: #selector(toFromAction)) mask_img.addGestureRecognizer(mask_tap) mask_img.isUserInteractionEnabled = true addSubview(voice_view) voice_view.snp.makeConstraints { make in make.edges.equalToSuperview() } let answer_tap = UITapGestureRecognizer(target: self, action: #selector(toBackAction)) answer_img.addGestureRecognizer(answer_tap) answer_img.isUserInteractionEnabled = true let contentVoiceView = UIView() contentVoiceView.backgroundColor = .white contentVoiceView.jq_cornerRadius = 8 voice_view.addSubview(contentVoiceView) contentVoiceView.snp.makeConstraints { make in make.left.equalTo(40) make.right.equalTo(-40) make.top.equalTo(55) make.bottom.equalTo(-55) } let img1 = UIImageView(image: UIImage(named: "icon_play_1")) contentVoiceView.addSubview(img1) img1.snp.makeConstraints { make in make.left.equalTo(23) make.width.height.equalTo(32) make.centerY.equalToSuperview() } let playBtn = UIButton(type: .custom) playBtn.addTarget(self, action: #selector(playAction), for: .touchUpInside) playBtn.setImage(UIImage(named: "icon_play"), for: .normal) contentVoiceView.addSubview(playBtn) playBtn.snp.makeConstraints { make in make.right.equalTo(-23) make.width.height.equalTo(32) make.centerY.equalToSuperview() } // let mask_tap = UITapGestureRecognizer(target: self, action: #selector(toFromAction)) // mask_img.addGestureRecognizer(mask_tap) // mask_img.isUserInteractionEnabled = true // // let answer_tap = UITapGestureRecognizer(target: self, action: #selector(toBackAction)) // answer_img.addGestureRecognizer(answer_tap) // answer_img.isUserInteractionEnabled = true } @objc func playAction(){ VoicePlayer.share().playerEnd() VoicePlayer.share().playerAt(url: model.correct) } func setModel(_ model:Listen1SubModel){ self.model = model answer_img.sd_setImage(with: URL(string: model.img)) } required init?(coder: NSCoder) { DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift
@@ -44,6 +44,11 @@ var maxPage = BehaviorRelay<Int>(value: 5) var listenType = BehaviorRelay<ListenType>(value:.lesson1) var times:Int = 0 var quarter = BehaviorRelay<Int?>(value: 0) var week = BehaviorRelay<Int?>(value: 0) //游戏专属,游戏等级 var gameLevel = BehaviorRelay<Int>(value:0) //回答错误数量 var correctNum:Int = 0{ @@ -120,9 +125,15 @@ private var timer:Timer! init(listenType:ListenType) { init(listenType:ListenType,quarter:Int? = nil,week:Int? = nil) { super.init(nibName: nil, bundle: nil) self.viewModel.listenType.accept(listenType) self.viewModel.week.accept(week) self.viewModel.quarter.accept(quarter) if listenType == .game1 || listenType == .game2{ self.viewModel.maxPage.accept(1) } } required init?(coder: NSCoder) { @@ -136,8 +147,6 @@ self?.quitAction() } pageVC.reloadData() btn_exit.addTarget(self, action: #selector(quitAction), for: .touchUpInside) btn_forward.addTarget(self, action: #selector(beforeAction), for: .touchUpInside) @@ -145,6 +154,12 @@ if viewModel.listenType.value == .game1 || viewModel.listenType.value == .game2{ btn_forward.isHidden = true label_pageNum.isHidden = true if viewModel.listenType.value == .game1{ showGameLevel() } }else{ pageVC.reloadData() } timer = Timer(fire: .distantPast, interval: 1.0, repeats: true, block: {[weak self] _ in @@ -169,6 +184,23 @@ }else{ make.bottom.equalTo(self.label_pageNum.snp.top).offset(-32) } } } private func showGameLevel(){ ChooseLevelView.show {[weak self] level in guard let weakSelf = self else { return } weakSelf.viewModel.gameLevel.accept(level) Services.gameHearing(difficulty: level, quarter: weakSelf.viewModel.quarter.value!, week: weakSelf.viewModel.week.value!).subscribe(onNext: {result in GameBeginTipView.show { if let data = result.data{ weakSelf.data = data weakSelf.pageVC.reloadData() } } },onError: { _ in weakSelf.showGameLevel() }).disposed(by: weakSelf.disposeBag) } } @@ -213,24 +245,16 @@ //完成 if nextPage >= weakSelf.viewModel.maxPage.value{ var toalIntegral:Int = 0 var ids = [Int]() for v in weakSelf.viewModel.answerItems.values{ if let v = v as? Listen1Model{ toalIntegral += v.data?.integral ?? 0 ids.append(v.data?.studyId ?? 0) } switch weakSelf.viewModel.listenType.value { case .game1,.game2: if let dict = noti.object as? Dictionary<String,Any>{ weakSelf.gamesComplete(gameId: dict["gameId"] as! Int,integral: dict["gameIntegral"] as! Int) } case .lesson1,.lesson2,.lesson3,.lesson4,.lesson5: weakSelf.studyComplete() case .story1,.story2:break } Services.completeLearing(type: weakSelf.viewModel.listenType.value.rawValue, studyTime: weakSelf.viewModel.times, studyIds: ids, isComplete: false).subscribe(onNext: {data in }).disposed(by: weakSelf.disposeBag) weakSelf.timer.invalidate() let vc = HomeStudyCompleteVC(correctNum: weakSelf.viewModel.correctNum, errorNum: weakSelf.viewModel.errorNum, totalCoin: toalIntegral) vc.title = weakSelf.viewModel.listenType.value.rawTitle weakSelf.push(vc: vc) return } @@ -243,6 +267,50 @@ self?.btn_forward.isHidden = currentPage <= 0 self?.label_pageNum.text = "已完成:\(weakSelf.viewModel.currentPage.value + 1)/\(weakSelf.viewModel.maxPage.value)" }).disposed(by: disposeBag) } //学习类完成 private func studyComplete(){ var toalIntegral:Int = 0 var ids = [Int]() for v in viewModel.answerItems.values{ if let v = v as? Listen1Model{ toalIntegral += v.data?.integral ?? 0 ids.append(v.data?.studyId ?? 0) } } Services.completeLearing(type: viewModel.listenType.value.rawValue, studyTime: viewModel.times, studyIds: ids, isComplete: false).subscribe(onNext: {data in }).disposed(by: disposeBag) timer.invalidate() let vc = HomeStudyCompleteVC(correctNum: viewModel.correctNum, errorNum: viewModel.errorNum, totalCoin: toalIntegral) vc.title = viewModel.listenType.value.rawTitle push(vc: vc) } private func gamesComplete(gameId:Int,integral:Int){ var name = "" if viewModel.listenType.value == .game1{ name = "超级听力" }else{ name = "超级记忆" } let accuracy = Int(Double(viewModel.correctNum) / Double(viewModel.correctNum + viewModel.errorNum) * 100) Services.completeGames(gameId: gameId, gameName: name, difficulty: viewModel.gameLevel.value, accuracy: accuracy, useTime: viewModel.times).subscribe(onNext: {data in }).disposed(by: disposeBag) timer.invalidate() let vc = HomeStudyCompleteVC(correctNum: viewModel.correctNum, errorNum: viewModel.errorNum, totalCoin: integral) vc.title = viewModel.listenType.value.rawTitle push(vc: vc) } deinit{ @@ -264,6 +332,11 @@ extension HomeListenFightVC:FFPageViewControllerDelegate{ func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt { //超级听力,只有一页 if viewModel.listenType.value == .game1 || viewModel.listenType.value == .game2{ return 1 } return UInt(viewModel.maxPage.value) } @@ -304,12 +377,15 @@ } if viewModel.listenType.value == .game1{ let vc = HomeListenGame_1_VC() if data == nil{return UIViewController()} let vc = HomeListenGame_1_VC(listen1Model: data as! Listen1Model) vc.rootViewModel = viewModel return vc } if viewModel.listenType.value == .game2{ let vc = HomeListenGame_2_VC() let vc = HomeListenGame_2_VC(listen1Model: data as! Listen1Model) vc.rootViewModel = viewModel return vc } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift
@@ -7,9 +7,16 @@ import UIKit let Games_1_Refresh_Noti = Notification.Name.init("Games_1_Refresh_Noti") class HomeListenGame_1_VC: BaseVC { private var viewModel = FightAnswerViewModel() private var listen1Model:Listen1Model! var rootViewModel:HomeListenFightViewModel! private var totalCount:Int = 1 //游戏的总数量 private lazy var label_class:UILabel = { let label = UILabel() @@ -26,6 +33,7 @@ label.textColor = UIColor(hexStr: "#EE1111") label.text = "请在10s内选择答案!" label.textAlignment = .center label.isHidden = true label.font = .systemFont(ofSize: 14, weight: .medium) return label }() @@ -50,15 +58,42 @@ }() private var timer:Timer? private var times:Int = 10 private var times:Int = 60 private var answerSet = Set<Listen1SubModel>() private var currentAnswer:Listen1SubModel?{ didSet{ if let v = currentAnswer{ view_studyHandleView.vioceSoundUrl = v.correct view_studyHandleView.voicePlayer.playerAt(url: v.correct) } } } required init(listen1Model:Listen1Model){ super.init(nibName: nil, bundle: nil) self.listen1Model = listen1Model } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() ChooseLevelView.show { level in GameBeginTipView.show { self.startTimer() if listen1Model != nil{ times = listen1Model?.data?.time ?? 10 collectionView.reloadData() label_hint.isHidden = false label_hint.text = "\(totalCount)" if timer == nil{startTimer()} for v in listen1Model?.subjectList ?? []{ answerSet.insert(v) } print("--->开始答题:剩余:\(answerSet.count)") currentAnswer = answerSet.randomElement() //随机 } } @@ -77,6 +112,7 @@ } view_class_title.addSubview(label_class) label_class.text = "\(totalCount)" label_class.snp.makeConstraints { make in make.left.equalTo(11) make.right.equalTo(-12) @@ -114,7 +150,8 @@ view.layoutIfNeeded() } private func startTimer(){ func startTimer(){ if timer == nil{ timer = Timer(timeInterval: 1.0, target: self, selector: #selector(runloopTime), userInfo: nil, repeats: true) } @@ -128,27 +165,37 @@ if times == 0{ timer?.fireDate = .distantFuture DispatchQueue.main.asyncAfter(deadline: .now()+3) { self.times = 10 self.timer?.fireDate = .distantPast if let c = currentAnswer{ answerSet.remove(c) } currentAnswer = answerSet.randomElement() //随机 times = listen1Model?.data?.time ?? 0 timer?.fireDate = .distantPast totalCount += 1 label_class.text = "\(totalCount)" //答题完成 if self.answerSet.count == 0{completeQuestion()} } } private func nextQuesAction(){ } private func answerQuestion(){ view.layoutIfNeeded() var answerType:Fight_lessonType = .none answerType = .success guard let row = viewModel.selectIndex.value?.row else { alertError(msg: "请选择");return } var answerType:Fight_lessonType = .none if currentAnswer?.id == listen1Model?.subjectList[row].id{ answerType = .success }else{ answerType = .fail } switch answerType { case .success: viewModel.answerType.accept(.success) collectionView.reloadData() rootViewModel.correctNum += 1 if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_Game_CCell", for: viewModel.selectIndex.value!) as? ListenFight_Game_CCell{ let newRect = cell.contentView.convert(cell.bounds, from: self.collectionView) let x = abs(newRect.origin.x) + self.collectionView.contentInset.left + 5 @@ -164,49 +211,65 @@ DispatchQueue.main.asyncAfter(deadline: .now()+0.5) { self.viewModel.answerType.accept(.none) self.collectionView.reloadData() self.times = 11 self.nextQuesAction() self.times = self.listen1Model?.data?.time ?? 10 self.totalCount += 1 self.label_class.text = "\(self.totalCount)" self.answerSet.remove(self.currentAnswer!) self.currentAnswer = self.answerSet.randomElement() print("--->下一题:\(self.currentAnswer?.id ?? 0) 剩余\(self.answerSet.count) 计数:\(self.totalCount)") //答题完成 if self.answerSet.count == 0{ self.completeQuestion() } } } } case .fail: rootViewModel.errorNum += 1 viewModel.answerType.accept(.fail) collectionView.reloadData() DispatchQueue.main.asyncAfter(wallDeadline: .now()+2.5) { self.viewModel.answerType.accept(.none) self.collectionView.reloadData() self.times = 11 self.nextQuesAction() } case .none: break } } private func completeQuestion(){ print("答题完成") self.label_hint.text = "答题完成" self.timer?.invalidate() self.rootViewModel.answerItems[0] = self.listen1Model NotificationCenter.default.post(name: NextLession_Noti, object: ["gameId":listen1Model.data!.id,"gameIntegral":listen1Model.data!.integral]) } } extension HomeListenGame_1_VC:UICollectionViewDelegate{ func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { viewModel.selectIndex.accept(indexPath) answerQuestion() let model = listen1Model!.subjectList[indexPath.row] if answerSet.contains(model){ viewModel.selectIndex.accept(indexPath) answerQuestion() } } } extension HomeListenGame_1_VC:UICollectionViewDataSource{ func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let model = listen1Model!.subjectList[indexPath.row] let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_Game_CCell", for: indexPath) as! ListenFight_Game_CCell if viewModel.selectIndex.value == indexPath{ cell.setState(state: viewModel.answerType.value) }else{ cell.setState(state: .none) } cell.setModel(model) return cell } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 12 return listen1Model?.subjectList.count ?? 0 } } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_2_VC.swift
@@ -7,10 +7,17 @@ import UIKit struct Game_2_SelectModel:Hashable{ var indexPath:IndexPath! var model:Listen1SubModel! } class HomeListenGame_2_VC: BaseVC { private var viewModel = FightAnswerViewModel() var rootViewModel:HomeListenFightViewModel! private var listen1Model:Listen1Model! private var selectModels = [Game_2_SelectModel]() private lazy var label_time:UILabel = { let label = UILabel() @@ -23,7 +30,7 @@ private lazy var collectionView:UICollectionView = { let flowLayout = UICollectionViewFlowLayout() let w = (JQ_ScreenW - 40 * 2 - 30) / 4.0 let w = (JQ_ScreenW - 40 * 2 - 50) / 5.0 flowLayout.itemSize = CGSize(width: w, height: w * 0.675) flowLayout.minimumInteritemSpacing = 10 @@ -37,6 +44,16 @@ private var timer:Timer? private var times:Int = 600 required init(listen1Model:Listen1Model){ super.init(nibName: nil, bundle: nil) self.listen1Model = listen1Model self.listen1Model.subjectList.shuffle() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() @@ -65,6 +82,7 @@ make.centerY.equalTo(label_surplusTitle) make.height.equalTo(44) } collectionView.delegate = self collectionView.dataSource = self @@ -131,22 +149,69 @@ extension HomeListenGame_2_VC:UICollectionViewDelegate{ func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { viewModel.selectIndex.accept(indexPath) _ = self.collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_Game_Pocket_CCell", for: indexPath) as! ListenFight_Game_Pocket_CCell if selectModels.last?.indexPath == indexPath{ print("重复点击");return } let model = listen1Model.subjectList[indexPath.row] if selectModels.count >= 2{ selectModels.removeFirst() } selectModels.append(Game_2_SelectModel(indexPath: indexPath, model: model)) print(selectModels.map({"\($0.indexPath.row)"}).joined(separator: "——")) if selectModels.count == 1{ let cell = self.collectionView.cellForItem(at: indexPath) as! ListenFight_Game_Pocket_CCell cell.toFromAction() } if selectModels.count == 2{ let cell = self.collectionView.cellForItem(at: indexPath) as! ListenFight_Game_Pocket_CCell cell.toFromAction() let firstM = selectModels.first let lastM = selectModels.last if firstM != nil && lastM != nil{ if firstM!.model.id == lastM!.model.id{ firstM!.model.isOpen = true lastM?.model.isOpen = true selectModels.removeAll() print("相同") }else{ print("不相同") let firstIndex = firstM!.indexPath let secondIndex = lastM!.indexPath let firstIndexCell = self.collectionView.cellForItem(at: firstIndex!) as! ListenFight_Game_Pocket_CCell let secondIndexCell = self.collectionView.cellForItem(at: secondIndex!) as! ListenFight_Game_Pocket_CCell DispatchQueue.main.asyncAfter(deadline: .now()+0.5){ firstIndexCell.toBackAction() secondIndexCell.toBackAction() self.selectModels.removeAll() } } } } } } extension HomeListenGame_2_VC:UICollectionViewDataSource{ func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let model = listen1Model.subjectList[indexPath.row] let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_Game_Pocket_CCell", for: indexPath) as! ListenFight_Game_Pocket_CCell cell.setModel(model) cell.voice_view.isHidden = !model.correct.isEmpty return cell } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 12 return listen1Model.subjectList.count } } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift
@@ -117,10 +117,19 @@ //自主游戏 if page == 5{ if indexPath.row == 0{ JQ_currentViewController().jq_push(vc: HomeListenFightVC(listenType: .game1)) let fightVC = HomeListenFightVC(listenType: .game1,quarter: quarter,week: week) fightVC.title = ListenType.game1.rawTitle JQ_currentViewController().jq_push(vc:fightVC) } if indexPath.row == 1{ JQ_currentViewController().jq_push(vc: HomeListenFightVC(listenType: .game2)) Services.gameMemory(quarter: quarter, week: week).subscribe(onNext: {result in if let data = result.data{ let fightVC = HomeListenFightVC(listenType: .game2) fightVC.title = ListenType.game2.rawTitle fightVC.data = data JQ_currentViewController().jq_push(vc: fightVC) } }).disposed(by: disposeBag) } } DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift
@@ -15,7 +15,7 @@ @IBOutlet weak var tackView_level: UIStackView! private var clouseLevel:((Int)->Void)! private var level:Int = 1 private var level:Int = 0 override func awakeFromNib() { super.awakeFromNib() DolphinEnglishLearnStudent/Moudle/Home/Listen/View/GameBeginTipView.swift
@@ -13,7 +13,8 @@ @IBOutlet weak var view_container: UIView! @IBOutlet weak var label_time: UILabel! private var timer:Timer? private var completeClouse:(()->Void)! override func awakeFromNib() { super.awakeFromNib() @@ -34,7 +35,7 @@ } completion: { _ in levelView.layoutIfNeeded() var time:Int = 5 Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in levelView.timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in time -= 1 levelView.label_time.text = "\(time)" levelView.animation() @@ -65,6 +66,7 @@ } @IBAction func completeAction(_ sender: UIButton) { timer?.invalidate() UIView.animate(withDuration: 0.4) { self.transform = .init(scaleX: 0.1, y: 0.1) self.alpha = 0 DolphinEnglishLearnStudent/Other/UIView/StudyHandleView.swift
@@ -21,7 +21,7 @@ private var playComplete:(()->Void)? private var playAtClouse:((Int)->Void)? private var voicePlayer = VoicePlayer.share() var voicePlayer = VoicePlayer.share() var vioceSoundUrl:String? override func awakeFromNib() { DolphinEnglishLearnStudent/Services/Services.swift
@@ -91,6 +91,35 @@ .append(key: "isComplete", value: isComplete) return NetworkRequest.request(params: params, method: .post,encoding: JSONEncoding.default, progress: true) } /// 完成游戏 class func completeGames(gameId:Int,gameName:String,difficulty:Int,accuracy:Int,useTime:Int)->Observable<BaseResponse<SimpleModel>>{ let params = ParamsAppender.build(url: All_Url) params.interface(url: "/study/base/study/gameAchievement") .append(key: "gameId", value: gameId) .append(key: "accuracy", value: accuracy) .append(key: "difficulty", value: difficulty) .append(key: "useTime", value: useTime) .append(key: "gameName", value: gameName) return NetworkRequest.request(params: params, method: .post,encoding: JSONEncoding.default, progress: true) } class func gameHearing(difficulty:Int,quarter:Int,week:Int)->Observable<BaseResponse<Listen1Model>>{ let params = ParamsAppender.build(url: All_Url) params.interface(url: "/study/base/study/gameHearing") params.append(key: "quarter", value: quarter) params.append(key: "difficulty", value: difficulty) params.append(key: "week", value: week) return NetworkRequest.request(params: params, method: .get, progress: true) } class func gameMemory(quarter:Int,week:Int)->Observable<BaseResponse<Listen1Model>>{ let params = ParamsAppender.build(url: All_Url) params.interface(url: "/study/base/study/gameMemory") params.append(key: "quarter", value: quarter) params.append(key: "week", value: week) return NetworkRequest.request(params: params, method: .get, progress: true) } } // MARK: -- 登录部分