Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
7fcf828
Copy teacher project
Periteus Mar 22, 2017
0a73c6b
Merge branch 'stino' into benny
Periteus Mar 22, 2017
975da99
Sort files - Add Faro - Add Models
Periteus Mar 23, 2017
71eb576
Sort by name
Periteus Mar 23, 2017
aec71d9
Add Faro - Service
Periteus Mar 23, 2017
ae3aa41
Add Faro - Post - PostService
Periteus Mar 23, 2017
4d8d75b
Failing viewModel load in app delegate
Periteus Mar 23, 2017
6c379c9
App transport security
Periteus Mar 23, 2017
a9c12af
Instantiate post from response
Periteus Mar 23, 2017
6a4345a
Trying to populate tableView with data from Faro
Periteus Mar 23, 2017
0de9e22
Remove load from app delegate
Periteus Mar 23, 2017
1b4c3ff
refactor Post Model
Periteus Mar 23, 2017
036c9ce
Reload tableView after loading
Periteus Mar 23, 2017
00e0101
Show data in tableView
Periteus Mar 23, 2017
11327d8
Add Objective-C vs swift md
Periteus Mar 23, 2017
12eebe5
Spelling
Periteus Mar 23, 2017
f799e49
add print
Periteus Mar 23, 2017
9fd366a
faro operators
Periteus Mar 23, 2017
37163ab
Weakself - Memory leak
Periteus Mar 23, 2017
3e71e50
simplify code
Periteus Mar 23, 2017
6f26cf5
marks
Periteus Mar 23, 2017
a6425af
PostDetailViewModel
Periteus Mar 23, 2017
762592f
postDetailViewModel continued
Periteus Mar 23, 2017
aacf850
Add detailViewModel
Periteus Mar 27, 2017
8815b28
Add general markup
Periteus Mar 27, 2017
d7dbc34
Testing linking
Periteus Mar 27, 2017
d7ce21c
no message
Periteus Mar 27, 2017
cf9d832
classes
Periteus Mar 27, 2017
d70b9af
Docs on functions
Periteus Mar 27, 2017
3a1a588
Removing enumerations until finding more information
Periteus Mar 27, 2017
d504db1
Change structure folders
Periteus Mar 28, 2017
eb439eb
change readme
Periteus Mar 28, 2017
bace11a
Try different link in readme file
Periteus Mar 28, 2017
f915956
Add lesson 2 link
Periteus Mar 28, 2017
fa1e4ef
restructure
Periteus Mar 28, 2017
b786dac
Links to lessons
Periteus Mar 28, 2017
1b41d4b
add personal notes and questions
Periteus Mar 29, 2017
11b1aa7
Add imports difference
Periteus Mar 29, 2017
6626d44
Merge branch 'benny-lesson3&4' into benny
Periteus Mar 29, 2017
b7dace8
Add personal notes: Keychain
Periteus Mar 29, 2017
ebae8ae
add google drive project
Periteus Mar 29, 2017
072dac5
questions update
Periteus Mar 29, 2017
0f3fdb0
Merge branch 'master' into benny
Periteus Mar 29, 2017
272e9b7
update questions
Periteus Mar 29, 2017
448103e
More questions 😨
Periteus Mar 29, 2017
bed072e
Merge branch 'master' into benny
Periteus Mar 29, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
# Lesson 1- Objective-C Foundation via Mocks
## Running into Objective-C from swift
As a funny intro to Objective-C checkout the following website
* http://fuckingblocksyntax.com
* http://fuckingclosuresyntax.com

We will now have a look at:
* Functions (Methods)
* Pointers
* Unit testing
* Mocking
* Runtime
* Assigment

## ​Method structure
![](Lesson%201%20-%20Objective-C%20Foundation%20via%20Mocks/screenshot.png)

![](Lesson%201%20-%20Objective-C%20Foundation%20via%20Mocks/screenshot.png)


### Pointers VS Value type

Dit is in Swift veel beter gedefinieerd. In Objective-C mag alles!

#### Array’s
Best om dit te begrijpen is met een voorbeeld in array

```swift
let array: [String] = ["string"]
```

```objective-c
NSArray* array; //je moet het geen waarde geven
array = @[@"string"];
```

**In Objective-C kan je alles mixen in een array**
```objective-c
NSArray* array; //je moet het geen waarde geven
Foo* foo= [[Foo alloc] init];
array = @[@"string", 12, foo]
```

Dit zou in swift in een Any array kunnen:

```swift
let array: [Any] = ["string", 12]
```

##### Mutability
Arrays manipuleren maakt duidelijk dat er een verschil is tussen objective-C en swift

In objective-C heb je van veel classes een mutable tegenhanger
* NSMutableArray & NSArray
* NSMutableURlRequest * NSURLRequest

In swift is dit opgelost met `let` & `var`

##### Objective-C meets swift
Je kan ook in Objective-C dezelfde type safety gaan opzoeken als in Swift. Daarvoor is er vorig jaar aan Objective-C een soort [Leight Weigth Generics](https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4-ID173) toegevoegd.

```Objective-C
NSArray <NSString *> * array = @[@"string"]
```

Nu kan er in een array enkel een string *steken*

### Instantiation and now finally about pointers and value types
![](Lesson%201%20-%20Objective-C%20Foundation%20via%20Mocks/screenshot.png)

Zoals gezegd is objective-C een oude taal. Dus gaat zij er vanuit dat je alles begrijpt over memory.
* Plaats maken voor iets = *alloceren*
* Plaats opvullen met iets = *instantieren*

Ook is code opgedeeld in 2 files
* Hetgeen de buitenwereld moet weten om aan de code te kunnen

Om iets aan te maken als `Foo` heb je dus twee stappen nodig
```Objective-c
// in een file met extensie .h
@interface Foo: NSObject
// alles hierin is publiek
@end

// Als je toch private dingen wil hebben zet je die in dezelfde file

@interface Foo() // de haken zijn nodig maar magisch
@end
// Eventueel in tweede file
@implementation Foo

@end
```

![](Lesson%201%20-%20Objective-C%20Foundation%20via%20Mocks/screenshot.png)

![](Lesson%201%20-%20Objective-C%20Foundation%20via%20Mocks/screenshot.png)

Objective-C is veel dynamischer als Swift. Het heeft namelijk een runtime die bepaald hoe de code gaat werken. Dit is belangrijk voor Unit testing!!!

* Swift: -> Hoe de code gaat ‘draaien’ wordt bepaald wanneer je compileerd
* Objective-C: -> de basis wordt opgezet maar tijdens het doorlopen van het programma kunnen er *alternatieve* paden aangebracht worden. Of anders de beslissing over welk code path er gevolgd zal worden wordt ad runtime gedaan.

# Uitdaging: Gebruiken bij unit testen
Om dit beter te begrijpen is het gemakkelijkste dat we unit testen beginnen schrijven.

[OCMOCK](http://ocmock.org/introduction/) is een framework dat je toe laat met de RunTime te spelen. Dit kan je ook *Dependency Injection* noemen als je graag hebt dat mensen je niet snappen en slim vinden.

## Opdracht
* Maak objective-C project
* Maak een unit test target
* `pod init`
* voeg OCMock toe via `pod 'OCMock', '~> 3.4’`
* voeg Quick en Nimble toe
* doe pod project open en verander voor Quick en Nimble de `Us legacy Swift` naar __NO__

Wat ga je maken:
1. TableView die labels vult vanaf een viewModel
2. ViewModel ga je testen op basis van OCMock en OCMSTub [Stubbing](http://ocmock.org/reference/#stubing-methods) [Mock Objects](http://ocmock.org/reference/#creating-mock-objects)
3. Toon het aantal cellen vanaf het viewModel

Uitbreiding:
1. Voeg Faro toe
2. Maak een Mock van Faro
3. Doe een `gemockte` service call

# Links
* We hebben een account bij code-school: https://www.codeschool.com/courses/try-objective-c
* We hebben een account op Ray Wenderlich: https://videos.raywenderlich.com











Loading