📦










🤔
override func viewDidLoad() {
super.viewDidLoad()
// HUD
MBProgressHUD.showAdded(to: view, animated: true)
Alamofire.request("https://hogefuga.com/piyo").responseJSON {
[weak self] response in
guard response.error == nil else { return }
guard let data = response.data else { return }
guard let piyo = String(data: data, encoding: .utf8) else { return }
guard let weakSelf = self else { return }
// UI
weakSelf.piyoLabel.text = piyo
DispatchQueue.main.async { [weak self] in
guard let s = self else { return }
MBProgressHUD.hideAllHUDs(for: s.view, animated: true)
}
}
}
🤔
override func viewDidLoad() {
super.viewDidLoad()
metadataObjectTypesButton.isEnabled = false
sessionPresetsButton.isEnabled = false
cameraButton.isEnabled = false
zoomSlider.isEnabled = false
previewView.addGestureRecognizer(openBarcodeURLGestureRecognizer)
previewView.session = session
switch AVCaptureDevice.authorizationStatus(forMediaType: .video) {
case .authorized:
break
case .notDetermined:
sessionQueue.suspend()
AVCaptureDevice.requestAccess(forMediaType: .video, completionHandler: { granted in
if !granted {
self.setupResult = .notAuthorized
}
self.sessionQueue.resume()
})
default:
setupResult = .notAuthorized
}
sessionQueue.async {
self.configureSession()
}
}
























































🤔
override func viewDidLoad() {
super.viewDidLoad()
// HUD
MBProgressHUD.showAdded(to: view, animated: true)
Alamofire.request("https://hogefuga.com/piyo").responseJSON {
[weak self] response in
guard response.error == nil else { return }
guard let data = response.data else { return }
guard let piyo = String(data: data, encoding: .utf8) else { return }
guard let weakSelf = self else { return }
// UI
weakSelf.piyoLabel.text = piyo
DispatchQueue.main.async { [weak self] in
guard let s = self else { return }
MBProgressHUD.hideAllHUDs(for: s.view, animated: true)
}
}
}
🙆
class PiyoViewControllerImpl: UIViewController {

var piyoPresenter: PiyoPresenter!

@IBOutlet weak var piyoLabel: UILabel!

override func viewDidLoad() {
super.viewDidLoad()
piyoPresenter.readyForDisplay()
}
}



extension PiyoViewControllerImpl: PiyoViewController {
func showProgress() {
MBProgressHUD.showAdded(to: view, animated: true)
}
func hideProgress() {
DispatchQueue.main.async { [weak self] in
guard let weakSelf = self else { return }
MBProgressHUD.hideAllHUDs(for: weakSelf.view, animated: true)
}
}
func showPiyo(piyo: String) {
piyoLabel.text = piyo
}
}




















protocol StatsViewController: class {
func showProfile(_ profile: Profile)
func reloadTableView()
}
final class StatsViewControllerImpl: UIViewController {
var statsPresenter: StatsPresenter!
@IBOutlet weak var nicknameLabel: UILabel!
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
statsPresenter.readyForDisplay(byMatch: .solo, region: .asia)
}
}
extension StatsViewControllerImpl: StatsViewController {
func showProfile(_ profile: Profile) {
DispatchQueue.main.async { [weak self] in
guard let weakSelf = self else { return }
weakSelf.nicknameLabel.text = profile.playerName
}
}
func reloadTableView() {
tableView.reloadData()
}
}
final class StatsViewControllerImpl: UIViewController {
var statsPresenter: StatsPresenter!
@IBOutlet weak var nicknameLabel: UILabel!
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
statsPresenter.readyForDisplay(byMatch: .solo, region: .asia)
}
}
extension StatsViewControllerImpl: StatsViewController {
func showProfile(_ profile: Profile) {
DispatchQueue.main.async { [weak self] in
guard let weakSelf = self else { return }
weakSelf.nicknameLabel.text = profile.playerName
}
}
func reloadTableView() {
tableView.reloadData()
}
}


final class StatsViewControllerImpl: UIViewController {
var statsPresenter: StatsPresenter!
@IBOutlet weak var nicknameLabel: UILabel!
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
statsPresenter.readyForDisplay(byMatch: .solo, region: .asia)
}
}
extension StatsViewControllerImpl: StatsViewController {
func showProfile(_ profile: Profile) {
DispatchQueue.main.async { [weak self] in
guard let weakSelf = self else { return }
weakSelf.nicknameLabel.text = profile.playerName
}
}
func reloadTableView() {
tableView.reloadData()
}
}


protocol StatsPresenter: class {
var stats: Stats! { get }
func readyForDisplay(byMatsh match: Match, region: Region)
}
final class StatsPresenterImpl: StatsPresenter {
private let pubgTrackerDataStore = PubgTrackerDataStore()
private weak var statsViewController: StatsViewController!
private var nickname: String!
var stats: Stats!
init(statsViewController: StatsViewController, nickname: String) {
self.statsViewController = statsViewController
self.nickname = nickname
}
func readyForDisplay(byMatsh match: Match, region: Region) {
pubgTrackerDataStore.fetchPubgTracker(byNickname: nickname) {
[weak self] stats in
guard let weakSelf = self else { return }
weakSelf.stats = stats
weakSelf.statsViewController.reloadTableView()
weakSelf.statsViewController.showProfile(profile)
}
}
}
final class StatsPresenterImpl: StatsPresenter {
private let pubgTrackerDataStore = PubgTrackerDataStore()
private weak var statsViewController: StatsViewController!
private var nickname: String!
var stats: Stats!
init(statsViewController: StatsViewController, nickname: String) {
self.statsViewController = statsViewController
self.nickname = nickname
}
func readyForDisplay(byMatsh match: Match, region: Region) {
pubgTrackerDataStore.fetchPubgTracker(byNickname: nickname) {
[weak self] stats in
guard let weakSelf = self else { return }
weakSelf.stats = stats
weakSelf.statsViewController.reloadTableView()
weakSelf.statsViewController.showProfile(profile)
}
}
}
final class StatsPresenterImpl: StatsPresenter {
private let pubgTrackerDataStore = PubgTrackerDataStore()
private weak var statsViewController: StatsViewController!
private var nickname: String!
var stats: Stats!
init(statsViewController: StatsViewController, nickname: String) {
self.statsViewController = statsViewController
self.nickname = nickname
}
func readyForDisplay(byMatsh match: Match, region: Region) {
pubgTrackerDataStore.fetchPubgTracker(byNickname: nickname) {
[weak self] stats in
guard let weakSelf = self else { return }
weakSelf.stats = stats
weakSelf.statsViewController.reloadTableView()
weakSelf.statsViewController.showProfile(profile)
}
}
}


final class StatsViewControllerImpl: UIViewController {
var statsPresenter: StatsPresenter!
@IBOutlet weak var nicknameLabel: UILabel!
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
statsPresenter.readyForDisplay(byMatch: .solo, region: .asia)
}
}
extension StatsViewControllerImpl: StatsViewController {
func showProfile(_ profile: Profile) {
DispatchQueue.main.async { [weak self] in
guard let weakSelf = self else { return }
weakSelf.nicknameLabel.text = profile.playerName
}
}
func reloadTableView() {
tableView.reloadData()
}
}





































節子、それViewControllerやない...、FatViewControllerや...。

  • 1.
  • 2.
  • 4.
  • 5.
  • 6.
  • 8.
    🤔 override func viewDidLoad(){ super.viewDidLoad() // HUD MBProgressHUD.showAdded(to: view, animated: true) Alamofire.request("https://hogefuga.com/piyo").responseJSON { [weak self] response in guard response.error == nil else { return } guard let data = response.data else { return } guard let piyo = String(data: data, encoding: .utf8) else { return } guard let weakSelf = self else { return } // UI weakSelf.piyoLabel.text = piyo DispatchQueue.main.async { [weak self] in guard let s = self else { return } MBProgressHUD.hideAllHUDs(for: s.view, animated: true) } } }
  • 9.
    🤔 override func viewDidLoad(){ super.viewDidLoad() metadataObjectTypesButton.isEnabled = false sessionPresetsButton.isEnabled = false cameraButton.isEnabled = false zoomSlider.isEnabled = false previewView.addGestureRecognizer(openBarcodeURLGestureRecognizer) previewView.session = session switch AVCaptureDevice.authorizationStatus(forMediaType: .video) { case .authorized: break case .notDetermined: sessionQueue.suspend() AVCaptureDevice.requestAccess(forMediaType: .video, completionHandler: { granted in if !granted { self.setupResult = .notAuthorized } self.sessionQueue.resume() }) default: setupResult = .notAuthorized } sessionQueue.async { self.configureSession() } }
  • 10.
  • 12.
  • 13.
  • 14.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 22.
  • 25.
  • 26.
    🤔 override func viewDidLoad(){ super.viewDidLoad() // HUD MBProgressHUD.showAdded(to: view, animated: true) Alamofire.request("https://hogefuga.com/piyo").responseJSON { [weak self] response in guard response.error == nil else { return } guard let data = response.data else { return } guard let piyo = String(data: data, encoding: .utf8) else { return } guard let weakSelf = self else { return } // UI weakSelf.piyoLabel.text = piyo DispatchQueue.main.async { [weak self] in guard let s = self else { return } MBProgressHUD.hideAllHUDs(for: s.view, animated: true) } } }
  • 27.
    🙆 class PiyoViewControllerImpl: UIViewController{
 var piyoPresenter: PiyoPresenter!
 @IBOutlet weak var piyoLabel: UILabel!
 override func viewDidLoad() { super.viewDidLoad() piyoPresenter.readyForDisplay() } }
 
 extension PiyoViewControllerImpl: PiyoViewController { func showProgress() { MBProgressHUD.showAdded(to: view, animated: true) } func hideProgress() { DispatchQueue.main.async { [weak self] in guard let weakSelf = self else { return } MBProgressHUD.hideAllHUDs(for: weakSelf.view, animated: true) } } func showPiyo(piyo: String) { piyoLabel.text = piyo } }
  • 28.
  • 29.
    
 
 
 
 
 
 
 
 
 protocol StatsViewController: class{ func showProfile(_ profile: Profile) func reloadTableView() }
  • 30.
    final class StatsViewControllerImpl:UIViewController { var statsPresenter: StatsPresenter! @IBOutlet weak var nicknameLabel: UILabel! @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() statsPresenter.readyForDisplay(byMatch: .solo, region: .asia) } } extension StatsViewControllerImpl: StatsViewController { func showProfile(_ profile: Profile) { DispatchQueue.main.async { [weak self] in guard let weakSelf = self else { return } weakSelf.nicknameLabel.text = profile.playerName } } func reloadTableView() { tableView.reloadData() } }
  • 31.
    final class StatsViewControllerImpl:UIViewController { var statsPresenter: StatsPresenter! @IBOutlet weak var nicknameLabel: UILabel! @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() statsPresenter.readyForDisplay(byMatch: .solo, region: .asia) } } extension StatsViewControllerImpl: StatsViewController { func showProfile(_ profile: Profile) { DispatchQueue.main.async { [weak self] in guard let weakSelf = self else { return } weakSelf.nicknameLabel.text = profile.playerName } } func reloadTableView() { tableView.reloadData() } }
  • 32.
    
 final class StatsViewControllerImpl:UIViewController { var statsPresenter: StatsPresenter! @IBOutlet weak var nicknameLabel: UILabel! @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() statsPresenter.readyForDisplay(byMatch: .solo, region: .asia) } } extension StatsViewControllerImpl: StatsViewController { func showProfile(_ profile: Profile) { DispatchQueue.main.async { [weak self] in guard let weakSelf = self else { return } weakSelf.nicknameLabel.text = profile.playerName } } func reloadTableView() { tableView.reloadData() } }
  • 33.
    
 protocol StatsPresenter: class{ var stats: Stats! { get } func readyForDisplay(byMatsh match: Match, region: Region) }
  • 34.
    final class StatsPresenterImpl:StatsPresenter { private let pubgTrackerDataStore = PubgTrackerDataStore() private weak var statsViewController: StatsViewController! private var nickname: String! var stats: Stats! init(statsViewController: StatsViewController, nickname: String) { self.statsViewController = statsViewController self.nickname = nickname } func readyForDisplay(byMatsh match: Match, region: Region) { pubgTrackerDataStore.fetchPubgTracker(byNickname: nickname) { [weak self] stats in guard let weakSelf = self else { return } weakSelf.stats = stats weakSelf.statsViewController.reloadTableView() weakSelf.statsViewController.showProfile(profile) } } }
  • 35.
    final class StatsPresenterImpl:StatsPresenter { private let pubgTrackerDataStore = PubgTrackerDataStore() private weak var statsViewController: StatsViewController! private var nickname: String! var stats: Stats! init(statsViewController: StatsViewController, nickname: String) { self.statsViewController = statsViewController self.nickname = nickname } func readyForDisplay(byMatsh match: Match, region: Region) { pubgTrackerDataStore.fetchPubgTracker(byNickname: nickname) { [weak self] stats in guard let weakSelf = self else { return } weakSelf.stats = stats weakSelf.statsViewController.reloadTableView() weakSelf.statsViewController.showProfile(profile) } } }
  • 36.
    final class StatsPresenterImpl:StatsPresenter { private let pubgTrackerDataStore = PubgTrackerDataStore() private weak var statsViewController: StatsViewController! private var nickname: String! var stats: Stats! init(statsViewController: StatsViewController, nickname: String) { self.statsViewController = statsViewController self.nickname = nickname } func readyForDisplay(byMatsh match: Match, region: Region) { pubgTrackerDataStore.fetchPubgTracker(byNickname: nickname) { [weak self] stats in guard let weakSelf = self else { return } weakSelf.stats = stats weakSelf.statsViewController.reloadTableView() weakSelf.statsViewController.showProfile(profile) } } }
  • 37.
    
 final class StatsViewControllerImpl:UIViewController { var statsPresenter: StatsPresenter! @IBOutlet weak var nicknameLabel: UILabel! @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() statsPresenter.readyForDisplay(byMatch: .solo, region: .asia) } } extension StatsViewControllerImpl: StatsViewController { func showProfile(_ profile: Profile) { DispatchQueue.main.async { [weak self] in guard let weakSelf = self else { return } weakSelf.nicknameLabel.text = profile.playerName } } func reloadTableView() { tableView.reloadData() } } 

  • 38.
  • 41.
  • 42.
  • 43.
  • 46.