Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Kazumi IWANAGA
カスタムプランと汎用プラン
Masao Fujii
失敗から学ぶAWSの監視
株式会社オプト 仙台ラボラトリ
富士ゼロックスのクラウド活用で起こした変革
Yuta Watanabe
[Cloud OnAir] Google Networking Deep Dive ! その技術と設計の紹介 2018年8月9日 放送
Google Cloud Platform - Japan
.NET 6 と Blazor で作るクロスプラットフォームアプリ概要
Akira Inoue
1
of
46
Top clipped slide
節子、それViewControllerやない...、FatViewControllerや...。
Sep. 15, 2017
•
0 likes
5 likes
×
Be the first to like this
Show More
•
29,559 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Technology
iOSDC 2017 前夜祭の資料 #iosdc
Kenji Tanaka
Follow
iOSエンジニア,サーバーサイドエンジニア at ピクシブ株式会社
Advertisement
Advertisement
Advertisement
Recommended
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
Jun-ichi Sakamoto
3.7K views
•
49 slides
Web開発者が始める .NET MAUI Blazor App
TomomitsuKusaba
665 views
•
32 slides
API Gatewayご紹介
オラクルエンジニア通信
746 views
•
9 slides
Nuxt.jsとExpressでSPA×SSR×API Aggregationを実現した話
Recruit Lifestyle Co., Ltd.
8.3K views
•
23 slides
Blazor 触ってみた
Oda Shinsuke
2K views
•
30 slides
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
2.3K views
•
23 slides
More Related Content
Slideshows for you
(20)
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
•
85.3K views
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
•
2.6K views
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Kazumi IWANAGA
•
6.6K views
カスタムプランと汎用プラン
Masao Fujii
•
1.7K views
失敗から学ぶAWSの監視
株式会社オプト 仙台ラボラトリ
•
2K views
富士ゼロックスのクラウド活用で起こした変革
Yuta Watanabe
•
760 views
[Cloud OnAir] Google Networking Deep Dive ! その技術と設計の紹介 2018年8月9日 放送
Google Cloud Platform - Japan
•
4.5K views
.NET 6 と Blazor で作るクロスプラットフォームアプリ概要
Akira Inoue
•
819 views
基礎から学ぶ? EC2マルチキャスト
Noritaka Sekiyama
•
2.9K views
Horizon View へのスマートカード認証の導入
shigeyat-vmw
•
13.1K views
Google Cloud でアプリケーションを動かす.pdf
Google Cloud Platform - Japan
•
343 views
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
Kouhei Sutou
•
1.9K views
ID連携における仮名
Naohiro Fujie
•
15.7K views
.NET 最新ロードマップと今押さえておきたい技術要素
Akira Inoue
•
8.5K views
「Entity Framework Coreを使ってみる」 公開用
ESM SEC
•
4.5K views
Webアクセシビリティセミナー2:なぜ企業はWebアクセシビリティに取り組むのか?
Web Accessibility Infrastructure Committee (WAIC)
•
3.3K views
cloudpack負荷職人結果レポート(サンプル)
iret, Inc.
•
2.4K views
[Postgre sql9.4新機能]レプリケーション・スロットの活用
Kosuke Kida
•
19.8K views
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
Shotaro Suzuki
•
384 views
プロトコルから見るID連携
Naohiro Fujie
•
10K views
Similar to 節子、それViewControllerやない...、FatViewControllerや...。
(20)
[22]Efficient and Testable MVVM pattern
NAVER Engineering
•
1.4K views
jQuery secrets
Bastian Feder
•
2.3K views
Intro programacion funcional
NSCoder Mexico
•
306 views
Gutenberg sous le capot, modules réutilisables
Riad Benguella
•
1.6K views
Android workshop
Michael Galpin
•
1.1K views
international PHP2011_Bastian Feder_jQuery's Secrets
smueller_sandsmedia
•
418 views
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
Tsuyoshi Yamamoto
•
1.4K views
Android Best Practices
Yekmer Simsek
•
7K views
Swift Delhi: Practical POP
Natasha Murashev
•
3.1K views
Improving android experience for both users and developers
Pavel Lahoda
•
393 views
Droidcon2013 android experience lahoda
Droidcon Berlin
•
597 views
Building Lithium Apps
Nate Abele
•
5.7K views
Writing Maintainable JavaScript
Andrew Dupont
•
3.1K views
Deep dive into Oracle ADF
Euegene Fedorenko
•
1.7K views
Practialpop 160510130818
Shahzain Saeed
•
78 views
Practical Protocol-Oriented-Programming
Natasha Murashev
•
90.3K views
MCE^3 - Natasha Murashev - Practical Protocol-Oriented Programming in Swift
PROIDEA
•
198 views
jQuery secrets
Bastian Feder
•
1.3K views
Prescribing RX Responsibly
Nareg Khoshafian
•
176 views
Smooth scrolling in UITableView and UICollectionView
Andrea Prearo
•
1.6K views
Advertisement
More from Kenji Tanaka
(20)
FatViewControllerを安全に書き換える方法が見つからなかったので、どういう痛みを許容するか考えた #iosdc
Kenji Tanaka
•
12.8K views
リリース前のリグレッションテストがめんどい!のでMagic PodでUIテストを試してみる #pixiv_app_night
Kenji Tanaka
•
1.1K views
ポストモーテムやってみた #yjbonfire
Kenji Tanaka
•
1.7K views
2つの同期 4つの状態 #pixiv_ios_arch
Kenji Tanaka
•
3.1K views
2つの同期 4つの状態 #app_mp
Kenji Tanaka
•
1.7K views
2つの同期 4つの状態 #roppongiswift
Kenji Tanaka
•
540 views
トークンリフレッシュ処理を含むAPIClientのテスト #hakata_test_night
Kenji Tanaka
•
2K views
よく使うテストヘルパーの紹介 #ios_test_night
Kenji Tanaka
•
800 views
Swiftで聞いておぼえるテスト書き
Kenji Tanaka
•
491 views
設計時空のリファクタリング
Kenji Tanaka
•
4.4K views
WACATE 2018 Summer
Kenji Tanaka
•
1.4K views
テスト駆動開発入門 by Swift
Kenji Tanaka
•
517 views
An iOS Engineer challenges Web.
Kenji Tanaka
•
871 views
エンジニアのためのブログ講座Ver4
Kenji Tanaka
•
1.2K views
TDDやってみよ
Kenji Tanaka
•
481 views
ストレス社会に生きる、iOSエンジニアにオススメする百合の世界と作品
Kenji Tanaka
•
923 views
iOS 11からのDeviceCheck #とは
Kenji Tanaka
•
1.4K views
設計に答えはないから探してみよう
Kenji Tanaka
•
1.2K views
iOS 11からのアプリ間ファイル共有
Kenji Tanaka
•
5.2K views
iOS 11からのアプリ間ファイル共有_公開用
Kenji Tanaka
•
4.7K views
Recently uploaded
(20)
Skill Based Routing – The Complete Manual, Mieszko Rożej
CzechDreamin
•
0 views
Design Thinking - Ramco.ppt
silas Sargunam
•
0 views
Ape to API, Filip Dousek
CzechDreamin
•
0 views
Want to demo like a salesforce solution engineer?, Jasmine Ashley
CzechDreamin
•
0 views
20230601_FinOps_Meetup_Switzerland.pdf
Wuming Zhang
•
0 views
Make Animated Stop Watch by PowerPoint School.pptx
richtom
•
0 views
The minimum-profile approach – the modern way to design an efficient security...
CzechDreamin
•
0 views
Introduction to Custom Journey Builder Activities, Orkhan Alakbarli
CzechDreamin
•
0 views
Taking control of your queries with GraphQL, Alba Rivas
CzechDreamin
•
0 views
HAVOC-Workshop-Slides.pptx
seed4mexyz
•
0 views
SRE_Lecture_1,2,3,4.pptx
AlideveroMurtaza
•
0 views
“DEEPX’s New M1 NPU Delivers Flexibility, Accuracy, Efficiency and Performanc...
Edge AI and Vision Alliance
•
0 views
THE EVOLUTION OF HUMANITY'S GREATEST INVENTION, THE COMPUTER, AND ITS FUTURE.pdf
Faga1939
•
0 views
Why do you Need to Migrate to Salesforce Flow?, Andrew Cook
CzechDreamin
•
0 views
Zurich FinOps Meetup - 1st of June.pdf
Wuming Zhang
•
0 views
Real-time communication with Account Engagement (Pardot). Marketers meet deve...
CzechDreamin
•
0 views
Next Generation Digital Transformation
Vishal Sharma
•
0 views
HA and DR Architecture for HANA on Power Deck - 2022-Nov-21.PPTX
ThinL389917
•
0 views
GitHub Copilot: An AI Agent of Change for Civic Coders
Alicia Brown
•
0 views
9-current-andfuture-trendsofmediaandinformation-170830071432-converted.pptx
Lyka Gumatay
•
0 views
Advertisement
節子、それViewControllerやない...、FatViewControllerや...。
📦
🤔 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() } }
Advertisement