Enviar pesquisa
Carregar
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
•
1 gostou
•
898 visualizações
Jung Kim
Seguir
렛츠스위프트 워크숍. 첫번째 - 스위프트 클린코드와 코드리뷰
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 52
Baixar agora
Baixar para ler offline
Recomendados
스위프트를 여행하는 히치하이커를 위한 스타일 안내
스위프트를 여행하는 히치하이커를 위한 스타일 안내
Jung Kim
Letswift19-clean-architecture
Letswift19-clean-architecture
Jung Kim
Simulator customizing & testing for Xcode 9
Simulator customizing & testing for Xcode 9
Bongwon Lee
[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
Wanbok Choi
EcmaScript 6 - The future is here
EcmaScript 6 - The future is here
Sebastiano Armeli
Rust ⇋ JavaScript
Rust ⇋ JavaScript
Ingvar Stepanyan
JavaScript and the AST
JavaScript and the AST
Jarrod Overson
Elm: give it a try
Elm: give it a try
Eugene Zharkov
Recomendados
스위프트를 여행하는 히치하이커를 위한 스타일 안내
스위프트를 여행하는 히치하이커를 위한 스타일 안내
Jung Kim
Letswift19-clean-architecture
Letswift19-clean-architecture
Jung Kim
Simulator customizing & testing for Xcode 9
Simulator customizing & testing for Xcode 9
Bongwon Lee
[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
Wanbok Choi
EcmaScript 6 - The future is here
EcmaScript 6 - The future is here
Sebastiano Armeli
Rust ⇋ JavaScript
Rust ⇋ JavaScript
Ingvar Stepanyan
JavaScript and the AST
JavaScript and the AST
Jarrod Overson
Elm: give it a try
Elm: give it a try
Eugene Zharkov
Cycle.js: Functional and Reactive
Cycle.js: Functional and Reactive
Eugene Zharkov
Minimizing Decision Fatigue to Improve Team Productivity
Minimizing Decision Fatigue to Improve Team Productivity
Derek Lee Boire
ES6 - Next Generation Javascript
ES6 - Next Generation Javascript
Ramesh Nair
ECMAScript 6
ECMAScript 6
Piotr Lewandowski
Compose Async with RxJS
Compose Async with RxJS
Kyung Yeol Kim
An Intro To ES6
An Intro To ES6
FITC
JavaScript ES6
JavaScript ES6
Leo Hernandez
FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6
Dmitry Soshnikov
Building fast interpreters in Rust
Building fast interpreters in Rust
Ingvar Stepanyan
ES6 PPT FOR 2016
ES6 PPT FOR 2016
Manoj Kumar
ES2015 workflows
ES2015 workflows
Jarrod Overson
Explaining ES6: JavaScript History and What is to Come
Explaining ES6: JavaScript History and What is to Come
Cory Forsyth
Introduction into ES6 JavaScript.
Introduction into ES6 JavaScript.
boyney123
ES2015 (ES6) Overview
ES2015 (ES6) Overview
hesher
Your code is not a string
Your code is not a string
Ingvar Stepanyan
AST Rewriting Using recast and esprima
AST Rewriting Using recast and esprima
Stephen Vance
AST - the only true tool for building JavaScript
AST - the only true tool for building JavaScript
Ingvar Stepanyan
JavaScript - i och utanför webbläsaren (2010-03-03)
JavaScript - i och utanför webbläsaren (2010-03-03)
Anders Jönsson
ES6 Overview
ES6 Overview
Bruno Scopelliti
Writing Clean Code in Swift
Writing Clean Code in Swift
Derek Lee Boire
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011
Chris Alfano
Designing REST API automation tests in Kotlin
Designing REST API automation tests in Kotlin
Dmitriy Sobko
Mais conteúdo relacionado
Mais procurados
Cycle.js: Functional and Reactive
Cycle.js: Functional and Reactive
Eugene Zharkov
Minimizing Decision Fatigue to Improve Team Productivity
Minimizing Decision Fatigue to Improve Team Productivity
Derek Lee Boire
ES6 - Next Generation Javascript
ES6 - Next Generation Javascript
Ramesh Nair
ECMAScript 6
ECMAScript 6
Piotr Lewandowski
Compose Async with RxJS
Compose Async with RxJS
Kyung Yeol Kim
An Intro To ES6
An Intro To ES6
FITC
JavaScript ES6
JavaScript ES6
Leo Hernandez
FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6
Dmitry Soshnikov
Building fast interpreters in Rust
Building fast interpreters in Rust
Ingvar Stepanyan
ES6 PPT FOR 2016
ES6 PPT FOR 2016
Manoj Kumar
ES2015 workflows
ES2015 workflows
Jarrod Overson
Explaining ES6: JavaScript History and What is to Come
Explaining ES6: JavaScript History and What is to Come
Cory Forsyth
Introduction into ES6 JavaScript.
Introduction into ES6 JavaScript.
boyney123
ES2015 (ES6) Overview
ES2015 (ES6) Overview
hesher
Your code is not a string
Your code is not a string
Ingvar Stepanyan
AST Rewriting Using recast and esprima
AST Rewriting Using recast and esprima
Stephen Vance
AST - the only true tool for building JavaScript
AST - the only true tool for building JavaScript
Ingvar Stepanyan
JavaScript - i och utanför webbläsaren (2010-03-03)
JavaScript - i och utanför webbläsaren (2010-03-03)
Anders Jönsson
ES6 Overview
ES6 Overview
Bruno Scopelliti
Writing Clean Code in Swift
Writing Clean Code in Swift
Derek Lee Boire
Mais procurados
(20)
Cycle.js: Functional and Reactive
Cycle.js: Functional and Reactive
Minimizing Decision Fatigue to Improve Team Productivity
Minimizing Decision Fatigue to Improve Team Productivity
ES6 - Next Generation Javascript
ES6 - Next Generation Javascript
ECMAScript 6
ECMAScript 6
Compose Async with RxJS
Compose Async with RxJS
An Intro To ES6
An Intro To ES6
JavaScript ES6
JavaScript ES6
FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6
Building fast interpreters in Rust
Building fast interpreters in Rust
ES6 PPT FOR 2016
ES6 PPT FOR 2016
ES2015 workflows
ES2015 workflows
Explaining ES6: JavaScript History and What is to Come
Explaining ES6: JavaScript History and What is to Come
Introduction into ES6 JavaScript.
Introduction into ES6 JavaScript.
ES2015 (ES6) Overview
ES2015 (ES6) Overview
Your code is not a string
Your code is not a string
AST Rewriting Using recast and esprima
AST Rewriting Using recast and esprima
AST - the only true tool for building JavaScript
AST - the only true tool for building JavaScript
JavaScript - i och utanför webbläsaren (2010-03-03)
JavaScript - i och utanför webbläsaren (2010-03-03)
ES6 Overview
ES6 Overview
Writing Clean Code in Swift
Writing Clean Code in Swift
Semelhante a Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011
Chris Alfano
Designing REST API automation tests in Kotlin
Designing REST API automation tests in Kotlin
Dmitriy Sobko
FP - Découverte de Play Framework Scala
FP - Découverte de Play Framework Scala
Kévin Margueritte
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
Remy Sharp
Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02
PL dream
a data driven game object system
a data driven game object system
maa77
HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?
Remy Sharp
Analyzing the Performance of Mobile Web
Analyzing the Performance of Mobile Web
Ariya Hidayat
Adopting F# at SBTech
Adopting F# at SBTech
Antya Dev
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools
Mark Billinghurst
Browsers with Wings
Browsers with Wings
Remy Sharp
Undefined Behavior and Compiler Optimizations (NDC Oslo 2018)
Undefined Behavior and Compiler Optimizations (NDC Oslo 2018)
Patricia Aas
Taking Jenkins Pipeline to the Extreme
Taking Jenkins Pipeline to the Extreme
yinonavraham
Python, WebRTC and You (v2)
Python, WebRTC and You (v2)
Saúl Ibarra Corretgé
A la découverte de TypeScript
A la découverte de TypeScript
Denis Voituron
An Introduction to Game Programming with Flash: An Introduction to Flash and ...
An Introduction to Game Programming with Flash: An Introduction to Flash and ...
Krzysztof Opałka
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
Heiko Behrens
Node.js for enterprise - JS Conference
Node.js for enterprise - JS Conference
Timur Shemsedinov
Platform agnostic information systems development
Platform agnostic information systems development
Mark Jayson Fuentes
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Applitools
Semelhante a Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
(20)
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011
Designing REST API automation tests in Kotlin
Designing REST API automation tests in Kotlin
FP - Découverte de Play Framework Scala
FP - Découverte de Play Framework Scala
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02
a data driven game object system
a data driven game object system
HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?
Analyzing the Performance of Mobile Web
Analyzing the Performance of Mobile Web
Adopting F# at SBTech
Adopting F# at SBTech
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools
Browsers with Wings
Browsers with Wings
Undefined Behavior and Compiler Optimizations (NDC Oslo 2018)
Undefined Behavior and Compiler Optimizations (NDC Oslo 2018)
Taking Jenkins Pipeline to the Extreme
Taking Jenkins Pipeline to the Extreme
Python, WebRTC and You (v2)
Python, WebRTC and You (v2)
A la découverte de TypeScript
A la découverte de TypeScript
An Introduction to Game Programming with Flash: An Introduction to Flash and ...
An Introduction to Game Programming with Flash: An Introduction to Flash and ...
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
Node.js for enterprise - JS Conference
Node.js for enterprise - JS Conference
Platform agnostic information systems development
Platform agnostic information systems development
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Mais de Jung Kim
Let'Swift 2019 키노트
Let'Swift 2019 키노트
Jung Kim
Letswift18 키노트
Letswift18 키노트
Jung Kim
개발자를 위한 넓고 얕은 지식
개발자를 위한 넓고 얕은 지식
Jung Kim
Let'Swift 17 키노트
Let'Swift 17 키노트
Jung Kim
Swift와 Objective-C를 함께 쓰는 방법
Swift와 Objective-C를 함께 쓰는 방법
Jung Kim
마스터즈 오픈세미나 - 소프트웨어가좋아요
마스터즈 오픈세미나 - 소프트웨어가좋아요
Jung Kim
소프트웨어로 미래를 준비하는 사람들
소프트웨어로 미래를 준비하는 사람들
Jung Kim
Developerway-2016-camp
Developerway-2016-camp
Jung Kim
Swift internals
Swift internals
Jung Kim
Swift2 smalltalk osxdev
Swift2 smalltalk osxdev
Jung Kim
모바일 트렌드와 iOS
모바일 트렌드와 iOS
Jung Kim
개발자로 살아가는 길, 그리고 NEXT
개발자로 살아가는 길, 그리고 NEXT
Jung Kim
차세대컴파일러, VM의미래: 애플 오픈소스 LLVM
차세대컴파일러, VM의미래: 애플 오픈소스 LLVM
Jung Kim
Mais de Jung Kim
(13)
Let'Swift 2019 키노트
Let'Swift 2019 키노트
Letswift18 키노트
Letswift18 키노트
개발자를 위한 넓고 얕은 지식
개발자를 위한 넓고 얕은 지식
Let'Swift 17 키노트
Let'Swift 17 키노트
Swift와 Objective-C를 함께 쓰는 방법
Swift와 Objective-C를 함께 쓰는 방법
마스터즈 오픈세미나 - 소프트웨어가좋아요
마스터즈 오픈세미나 - 소프트웨어가좋아요
소프트웨어로 미래를 준비하는 사람들
소프트웨어로 미래를 준비하는 사람들
Developerway-2016-camp
Developerway-2016-camp
Swift internals
Swift internals
Swift2 smalltalk osxdev
Swift2 smalltalk osxdev
모바일 트렌드와 iOS
모바일 트렌드와 iOS
개발자로 살아가는 길, 그리고 NEXT
개발자로 살아가는 길, 그리고 NEXT
차세대컴파일러, VM의미래: 애플 오픈소스 LLVM
차세대컴파일러, VM의미래: 애플 오픈소스 LLVM
Último
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
MadyBayot
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
wesley chun
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
Remote DBA Services
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
apidays
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
Andrey Devyatkin
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Juan lago vázquez
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
apidays
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
Nanddeep Nachan
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
The Digital Insurer
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
debabhi2
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
DianaGray10
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
Khem
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
apidays
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
lior mazor
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Deepika Singh
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
sammart93
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
Overkill Security
Último
(20)
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
1.
https://github.com/godrm/ChessMate
2.
🤩
3.
4.
5.
6.
7.
8.
? ? ? ? ?
9.
10.
11.
12.
API SwiftLint CI
13.
API SwiftLint CI
14.
Best Practices &
Styles ✱ Tab vs. Space ✱ Braces Styles ✱ Variable, Function, Class - Naming Rules ✱ Computed Properties vs. Methods ✱ Protocol + Extension + Generic ✱ Value Types vs. Reference Types
15.
Software maintenance is not
'keep it working like before'. It is 'keep it being useful in a changing world' - Jessica Kerr
16.
1. . . 2. / . 3. . 4. . 5. /
. 6. . 7. . .
17.
, ,
18.
http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
19.
? + +
20.
Main - ,
, , Reusability - DRY, components, generics Reliability - Exception handling and cleanup Extensibility Security - , , , Performance - , Lazy Loading, , Scalability - Usability -
21.
https://c4model.com
22.
23.
🤩
24.
A B C
D E F G H 8 7 6 5 4 3 2 1
25.
Person ChessMate System Email System App
Store
26.
Person ChessMate System Email System ChessMate
System iOS App Android App API ServerDatabase Apple App Store Google Play Store
27.
Person ChessMate System Mobile App AppDelegate ChessView Controller API
Server Network Manager APNS Server Background View
28.
1. SRP (Single-Responsibility
Principle) ( , , ) . - . 2. OCP (Open-Close Principle) , . . 3. LSP (Liskov Substitution Principle) ( ) . ( ) . 4. DIP (Dependency-Inversion Principle) . ( ) , . 5. ISP (Interface-Segregation Principle) .
29.
struct InputView { func
readInput() { print(" .") let userInput = readLine() guard let input = userInput else { return } print(seperateCoordinates(userInput: input)) } //… } struct InputView { func readLine(prompt: String) -> String { print(prompt) let line = readLine() guard let input = line else { return "" } return input } //… }
30.
class BackgroundView: UIView
{ private let Steps = 8 // convenience init() { self.init(frame: ChessBackgroundView.centralRect()) } private static func centralRect() -> CGRect { let screenRect = UIScreen.main.bounds let verticalMargin = (screenRect.height - screenRect.width) / 2 return CGRect(x: 0, y: verticalMargin, width: screenRect.width, height: screenRect.width) } override func draw(_ rect: CGRect) { let width = frame.width / CGFloat(Steps) let height = frame.height / CGFloat(Steps) var binaryFlag = false for y in 0..<Steps { for x in 0..<Steps { let boxFrame = CGRect(x: CGFloat(x) * width, y: CGFloat(y) * height, width: width, height: height) (binaryFlag ? UIColor.white : UIColor.black).setFill() UIBezierPath.init(rect: boxFrame).fill() binaryFlag.toggle() } binaryFlag.toggle() } } }
31.
UIScreen GUI Engine ChessMate System BackgroundView draw(rect:) init() centralRect()
32.
UIScreen GUI Engine ChessMate System BackgroundView draw(rect:) init(frame:) centralRect() BackgroundPresenter
33.
Person ChessMate System Mobile App AppDelegate ChessView Controller Background Presenter Background View
34.
Person ChessMate System Mobile App AppDelegate ChessView Controller Background Presenter Background View Pawn View King View Queen View
…
35.
View DataSource
36.
View DataSource DataSource <Protocol> Protocol-Oriented Programming
37.
Piece enum PieceType .pawn .king .queen .rook .bishop .knight type
38.
Piece Pawn type PieceType <Protocol> King Queen Rook
Bishop Knight
39.
Person ChessMate System Mobile App AppDelegate ChessView Controller Background Presenter Background View Piece <Protocol> Piece
40.
Constructor Injection Setter Injection Interface
Injection class BackgroundView: UIView { private var presenter : BackgroundPresenter! convenience init(presenter: BackgroundPresenter) { self.init(frame: presenter.centralRect()) self.presenter = presenter } } protocol GameManagerAction { func positionMap() -> Array<Array<Piece?>> func defaultFrame(path:(x : Int, y: Int)) -> CGRect } class ViewController: UIViewController { private var manager : GameManagerAction! func setManager(_ manager : GameManagerAction) { self.positionManager = manager } } protocol PieceImageSetter { func setImageBy(piece: Piece) } class PieceImageView: UIImageView, PieceImageSetter { func setImageBy(piece: Piece) { self.image = piece.type.image(color: piece.color.rawValue) } }
41.
protocol GameManagerAction { func
positionMap() -> Array<Array<Piece?>> } protocol GameManagerGeometric { func defaultFrame(for: (x : Int, y: Int)) -> CGRect } class ViewController: UIViewController { private var positionManager : (GameManagerAction & GameManagerGeometric)! func setManager(_ manager : GameManagerAction & GameManagerGeometric) { self.positionManager = manager } protocol GameManagerAction { func positionMap() -> Array<Array<Piece?>> func defaultFrame(path:(x : Int, y: Int)) -> CGRect }
42.
Person ChessMate System Mobile App AppDelegate ChessView Controller Background Presenter Background View Game Manager <Action> Game Manager Geometric
43.
. Don’t get it,
Just ask them.
44.
struct GamePositionManager { var
positionMap = Array<Array<Piece?>>()
45.
struct GamePositionManager { var
positionMap = Array<Array<Piece?>>()
46.
47.
(Driver)(Navigator) http://cameracourage.com/2012/11/what-does-a-rally-co-driver-do/
48.
• . • . •
, . • . • . • , , ! • . • . • . • ( 10 ~20 ) . • TDD . ( …)
49.
• . • . •
. • . • . , . • . • . • . • : .
50.
• . • '
' . • . • * * . • . • . • . • . • . • .
51.
• review . •
• , • 😱 • • • . . https://github.com/godrm/ChessMate
Baixar agora