📦
🍧


🍧
🍧




😂
🍧




😂








🤔 









class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var tweets: [Tweet] = []
override func viewDidLoad() {
super.viewDidLoad()
getTweets() { [unowned self] result in
switch result {
case .success(let tweets):
self.tweets = tweets
self.tableView.reloadData()
case .failure:
() //
}
}
}
}
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var tweets: [Tweet] = []
override func viewDidLoad() {
super.viewDidLoad()
getTweets() { [unowned self] result in
switch result {
case .success(let tweets):
self.tweets = tweets
self.tableView.reloadData()
case .failure:
() //
}
}
}
}
👊😤💢














protocol ViewControllerOutput: class {
func reloadTableView()
}
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var presenter: SomePresenter!
override func viewDidLoad() {
super.viewDidLoad()
presenter = SomePresenter(output: self)
presenter.getTweets()
}
}
extension ViewController: ViewControllerOutput {
func reloadTableView() {
tableView.reloadData()
}
}
protocol ViewControllerOutput: class {
func reloadTableView()
}
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var presenter: SomePresenter!
override func viewDidLoad() {
super.viewDidLoad()
presenter = SomePresenter(output: self)
presenter.getTweets()
}
}
extension ViewController: ViewControllerOutput {
func reloadTableView() {
tableView.reloadData()
}
}
protocol ViewControllerOutput: class {
func reloadTableView()
}
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var presenter: SomePresenter!
override func viewDidLoad() {
super.viewDidLoad()
presenter = SomePresenter(output: self)
presenter.getTweets()
}
}
extension ViewController: ViewControllerOutput {
func reloadTableView() {
tableView.reloadData()
}
}
class SomePresenter {
let output: ViewControllerOutput!
var tweets: [Tweet] = []
init(output: ViewControllerOutput) {
self.output = output
}
func getTweets() {
let twitterManager = TwitterManager()
twitterManager.fetchTimeline() { [unowned self] result in
switch result {
case .success(let tweets):
self.tweets = tweets
self.output.reloadTableView()
case .failure:
() //
}
}
}
}
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var presenter: SomePresenter!
override func viewDidLoad() {
super.viewDidLoad()
presenter = SomePresenter(output: self)
presenter.getTweets()
}
}
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var tweets: [Tweet] = []
override func viewDidLoad() {
super.viewDidLoad()
getTweets() { [unowned self] result in
switch result {
case .success(let tweets):
self.tweets = tweets
self.tableView.reloadData()
case .failure:
() //
}
}
}
}
👋






🍧
















🎂 🎂
🎂 🎂
💪📦
描画とビジネスをクリーンに分ける(公開用)

描画とビジネスをクリーンに分ける(公開用)

  • 1.
  • 2.
  • 3.
  • 5.
  • 6.
  • 7.
  • 9.
  • 12.
  • 15.
    class ViewController: UIViewController{ @IBOutlet weak var tableView: UITableView! var tweets: [Tweet] = [] override func viewDidLoad() { super.viewDidLoad() getTweets() { [unowned self] result in switch result { case .success(let tweets): self.tweets = tweets self.tableView.reloadData() case .failure: () // } } } }
  • 16.
    class ViewController: UIViewController{ @IBOutlet weak var tableView: UITableView! var tweets: [Tweet] = [] override func viewDidLoad() { super.viewDidLoad() getTweets() { [unowned self] result in switch result { case .success(let tweets): self.tweets = tweets self.tableView.reloadData() case .failure: () // } } } } 👊😤💢
  • 17.
  • 18.
  • 21.
  • 22.
    protocol ViewControllerOutput: class{ func reloadTableView() } class ViewController: UIViewController { @IBOutlet weak var tableView: UITableView! var presenter: SomePresenter! override func viewDidLoad() { super.viewDidLoad() presenter = SomePresenter(output: self) presenter.getTweets() } } extension ViewController: ViewControllerOutput { func reloadTableView() { tableView.reloadData() } }
  • 23.
    protocol ViewControllerOutput: class{ func reloadTableView() } class ViewController: UIViewController { @IBOutlet weak var tableView: UITableView! var presenter: SomePresenter! override func viewDidLoad() { super.viewDidLoad() presenter = SomePresenter(output: self) presenter.getTweets() } } extension ViewController: ViewControllerOutput { func reloadTableView() { tableView.reloadData() } }
  • 24.
    protocol ViewControllerOutput: class{ func reloadTableView() } class ViewController: UIViewController { @IBOutlet weak var tableView: UITableView! var presenter: SomePresenter! override func viewDidLoad() { super.viewDidLoad() presenter = SomePresenter(output: self) presenter.getTweets() } } extension ViewController: ViewControllerOutput { func reloadTableView() { tableView.reloadData() } }
  • 25.
    class SomePresenter { letoutput: ViewControllerOutput! var tweets: [Tweet] = [] init(output: ViewControllerOutput) { self.output = output } func getTweets() { let twitterManager = TwitterManager() twitterManager.fetchTimeline() { [unowned self] result in switch result { case .success(let tweets): self.tweets = tweets self.output.reloadTableView() case .failure: () // } } } }
  • 26.
    class ViewController: UIViewController{ @IBOutlet weak var tableView: UITableView! var presenter: SomePresenter! override func viewDidLoad() { super.viewDidLoad() presenter = SomePresenter(output: self) presenter.getTweets() } } class ViewController: UIViewController { @IBOutlet weak var tableView: UITableView! var tweets: [Tweet] = [] override func viewDidLoad() { super.viewDidLoad() getTweets() { [unowned self] result in switch result { case .success(let tweets): self.tweets = tweets self.tableView.reloadData() case .failure: () // } } } }
  • 28.
  • 30.
  • 31.
  • 33.
  • 36.
  • 39.
  • 42.