Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Updated to Swift 4.
Tested playground file in Xcode 8.3.3 and 9.0 beta 6. There’s no
breaking changes in Swift 4 so it runs in Xcode 8 as well.
  • Loading branch information
Boris Yurkevich committed Aug 28, 2017
1 parent a4bc25a commit 8a12a6e
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 51 deletions.
Binary file modified OOD-Principles-In-Swift.playground.zip
Binary file not shown.
35 changes: 18 additions & 17 deletions OOD-Principles-In-Swift.playground/contents.swift
Expand Up @@ -3,13 +3,16 @@ import Foundation

/*:
The Principles of OOD in Swift 2.2
The Principles of OOD in Swift 4
==================================
A short cheat-sheet with Xcode 7.3 Playground ([OOD-Principles-In-Swift.playground.zip](https://raw.githubusercontent.com/ochococo/OOD-Principles-In-Swift/master/OOD-Principles-In-Swift.playground.zip)).
A short cheat-sheet with Xcode 9 Playground ([OOD-Principles-In-Swift.playground.zip](https://raw.githubusercontent.com/ochococo/OOD-Principles-In-Swift/master/OOD-Principles-In-Swift.playground.zip)).
Also compatible with Xcode 8 and Swift 3.
👷 Project maintained by: [@nsmeme](http://twitter.com/nsmeme) (Oktawian Chojnacki)
⚠️ See my most popular project to date: [Design-Patterns-In-Swift](https://github.com/ochococo/Design-Patterns-In-Swift)
S.O.L.I.D.
==========
Expand Down Expand Up @@ -160,7 +163,7 @@ Derived classes must be substitutable for their base classes. ([read more](http:
Example:
*/

let requestKey: NSString = "NSURLRequestKey"
let requestKey: String = "NSURLRequestKey"

// I'm a NSError subclass. I provide additional functionality but don't mess with original ones.
class RequestError: NSError {
Expand All @@ -173,7 +176,7 @@ class RequestError: NSError {
// I fail to fetch data and will return RequestError.
func fetchData(request: NSURLRequest) -> (data: NSData?, error: RequestError?) {

let userInfo: [NSObject:AnyObject] = [ requestKey : request ]
let userInfo: [String:Any] = [requestKey : request]

return (nil, RequestError(domain:"DOMAIN", code:0, userInfo: userInfo))
}
Expand All @@ -182,7 +185,7 @@ func fetchData(request: NSURLRequest) -> (data: NSData?, error: RequestError?) {
func willReturnObjectOrError() -> (object: AnyObject?, error: NSError?) {

let request = NSURLRequest()
let result = fetchData(request)
let result = fetchData(request: request)

return (result.data, result.error)
}
Expand Down Expand Up @@ -212,7 +215,7 @@ protocol LandingSiteHaving {

// I can land on LandingSiteHaving objects.
protocol Landing {
func landOn(on: LandingSiteHaving) -> String
func land(on: LandingSiteHaving) -> String
}

// I have payload.
Expand Down Expand Up @@ -247,7 +250,7 @@ final class SpaceXCRS8: Landing, PayloadHaving {
> ⚠ CRS8 knows only about the landing site information.
*/

func landOn(on: LandingSiteHaving) -> String {
func land(on: LandingSiteHaving) -> String {
return "Landed on \(on.landingSite) at April 8, 2016 20:52 UTC"
}
}
Expand All @@ -256,23 +259,22 @@ let crs8 = SpaceXCRS8()
let barge = OfCourseIStillLoveYouBarge()
let spaceStation = InternationalSpaceStation()

spaceStation.fetchPayload(crs8)
crs8.landOn(barge)

spaceStation.fetchPayload(vehicle: crs8)
crs8.land(on: barge)
/*:
# 🔩 The Dependency Inversion Principle
# 🔝 The Dependency Inversion Principle
Depend on abstractions, not on concretions. ([read more](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en))
Example:
*/

protocol TimeTraveling {
func travelInTime(time: NSTimeInterval) -> String
func travelInTime(time: TimeInterval) -> String
}

final class DeLorean: TimeTraveling {
func travelInTime(time: NSTimeInterval) -> String {
func travelInTime(time: TimeInterval) -> String {
return "Used Flux Capacitor and travelled in time by: \(time)s"
}
}
Expand All @@ -288,16 +290,15 @@ final class EmmettBrown {
self.timeMachine = timeMachine
}

func travelInTime(time: NSTimeInterval) -> String {
return timeMachine.travelInTime(time)
func travelInTime(time: TimeInterval) -> String {
return timeMachine.travelInTime(time: time)
}
}

let timeMachine = DeLorean()

let mastermind = EmmettBrown(timeMachine: timeMachine)
mastermind.travelInTime(-3600 * 8760)

mastermind.travelInTime(time: -3600 * 8760)
/*:
Info
Expand Down
33 changes: 16 additions & 17 deletions README.md
Expand Up @@ -5,10 +5,11 @@ import Foundation
```


The Principles of OOD in Swift 2.2
The Principles of OOD in Swift 4
==================================

A short cheat-sheet with Xcode 7.3 Playground ([OOD-Principles-In-Swift.playground.zip](https://raw.githubusercontent.com/ochococo/OOD-Principles-In-Swift/master/OOD-Principles-In-Swift.playground.zip)).
A short cheat-sheet with Xcode 9 Playground ([OOD-Principles-In-Swift.playground.zip](https://raw.githubusercontent.com/ochococo/OOD-Principles-In-Swift/master/OOD-Principles-In-Swift.playground.zip)).
Also compatible with Xcode 8 and Swift 3.

👷 Project maintained by: [@nsmeme](http://twitter.com/nsmeme) (Oktawian Chojnacki)

Expand Down Expand Up @@ -177,7 +178,7 @@ Example:

```swift

let requestKey: NSString = "NSURLRequestKey"
let requestKey: String = "NSURLRequestKey"

// I'm a NSError subclass. I provide additional functionality but don't mess with original ones.
class RequestError: NSError {
Expand All @@ -190,7 +191,7 @@ class RequestError: NSError {
// I fail to fetch data and will return RequestError.
func fetchData(request: NSURLRequest) -> (data: NSData?, error: RequestError?) {

let userInfo: [NSObject:AnyObject] = [ requestKey : request ]
let userInfo: [String:Any] = [requestKey : request]

return (nil, RequestError(domain:"DOMAIN", code:0, userInfo: userInfo))
}
Expand All @@ -199,7 +200,7 @@ func fetchData(request: NSURLRequest) -> (data: NSData?, error: RequestError?) {
func willReturnObjectOrError() -> (object: AnyObject?, error: NSError?) {

let request = NSURLRequest()
let result = fetchData(request)
let result = fetchData(request: request)

return (result.data, result.error)
}
Expand Down Expand Up @@ -231,7 +232,7 @@ protocol LandingSiteHaving {

// I can land on LandingSiteHaving objects.
protocol Landing {
func landOn(on: LandingSiteHaving) -> String
func land(on: LandingSiteHaving) -> String
}

// I have payload.
Expand Down Expand Up @@ -270,7 +271,7 @@ final class SpaceXCRS8: Landing, PayloadHaving {

```swift

func landOn(on: LandingSiteHaving) -> String {
func land(on: LandingSiteHaving) -> String {
return "Landed on \(on.landingSite) at April 8, 2016 20:52 UTC"
}
}
Expand All @@ -279,12 +280,11 @@ let crs8 = SpaceXCRS8()
let barge = OfCourseIStillLoveYouBarge()
let spaceStation = InternationalSpaceStation()

spaceStation.fetchPayload(crs8)
crs8.landOn(barge)

spaceStation.fetchPayload(vehicle: crs8)
crs8.land(on: barge)
```

# 🔩 The Dependency Inversion Principle
# 🔝 The Dependency Inversion Principle

Depend on abstractions, not on concretions. ([read more](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en))

Expand All @@ -293,11 +293,11 @@ Example:
```swift

protocol TimeTraveling {
func travelInTime(time: NSTimeInterval) -> String
func travelInTime(time: TimeInterval) -> String
}

final class DeLorean: TimeTraveling {
func travelInTime(time: NSTimeInterval) -> String {
func travelInTime(time: TimeInterval) -> String {
return "Used Flux Capacitor and travelled in time by: \(time)s"
}
}
Expand All @@ -315,16 +315,15 @@ final class EmmettBrown {
self.timeMachine = timeMachine
}

func travelInTime(time: NSTimeInterval) -> String {
return timeMachine.travelInTime(time)
func travelInTime(time: TimeInterval) -> String {
return timeMachine.travelInTime(time: time)
}
}

let timeMachine = DeLorean()

let mastermind = EmmettBrown(timeMachine: timeMachine)
mastermind.travelInTime(-3600 * 8760)

mastermind.travelInTime(time: -3600 * 8760)
```


Expand Down
13 changes: 6 additions & 7 deletions source/dip.swift
@@ -1,17 +1,17 @@
/*:
# 🔩 The Dependency Inversion Principle
# 🔝 The Dependency Inversion Principle
Depend on abstractions, not on concretions. ([read more](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en))
Example:
*/

protocol TimeTraveling {
func travelInTime(time: NSTimeInterval) -> String
func travelInTime(time: TimeInterval) -> String
}

final class DeLorean: TimeTraveling {
func travelInTime(time: NSTimeInterval) -> String {
func travelInTime(time: TimeInterval) -> String {
return "Used Flux Capacitor and travelled in time by: \(time)s"
}
}
Expand All @@ -27,13 +27,12 @@ final class EmmettBrown {
self.timeMachine = timeMachine
}

func travelInTime(time: NSTimeInterval) -> String {
return timeMachine.travelInTime(time)
func travelInTime(time: TimeInterval) -> String {
return timeMachine.travelInTime(time: time)
}
}

let timeMachine = DeLorean()

let mastermind = EmmettBrown(timeMachine: timeMachine)
mastermind.travelInTime(-3600 * 8760)

mastermind.travelInTime(time: -3600 * 8760)
7 changes: 5 additions & 2 deletions source/header.swift
Expand Up @@ -3,13 +3,16 @@ import Foundation

/*:
The Principles of OOD in Swift 2.2
The Principles of OOD in Swift 4
==================================
A short cheat-sheet with Xcode 7.3 Playground ([OOD-Principles-In-Swift.playground.zip](https://raw.githubusercontent.com/ochococo/OOD-Principles-In-Swift/master/OOD-Principles-In-Swift.playground.zip)).
A short cheat-sheet with Xcode 9 Playground ([OOD-Principles-In-Swift.playground.zip](https://raw.githubusercontent.com/ochococo/OOD-Principles-In-Swift/master/OOD-Principles-In-Swift.playground.zip)).
Also compatible with Xcode 8 and Swift 3.
👷 Project maintained by: [@nsmeme](http://twitter.com/nsmeme) (Oktawian Chojnacki)
⚠️ See my most popular project to date: [Design-Patterns-In-Swift](https://github.com/ochococo/Design-Patterns-In-Swift)
S.O.L.I.D.
==========
Expand Down
9 changes: 4 additions & 5 deletions source/isp.swift
Expand Up @@ -13,7 +13,7 @@ protocol LandingSiteHaving {

// I can land on LandingSiteHaving objects.
protocol Landing {
func landOn(on: LandingSiteHaving) -> String
func land(on: LandingSiteHaving) -> String
}

// I have payload.
Expand Down Expand Up @@ -48,7 +48,7 @@ final class SpaceXCRS8: Landing, PayloadHaving {
> ⚠ CRS8 knows only about the landing site information.
*/

func landOn(on: LandingSiteHaving) -> String {
func land(on: LandingSiteHaving) -> String {
return "Landed on \(on.landingSite) at April 8, 2016 20:52 UTC"
}
}
Expand All @@ -57,6 +57,5 @@ let crs8 = SpaceXCRS8()
let barge = OfCourseIStillLoveYouBarge()
let spaceStation = InternationalSpaceStation()

spaceStation.fetchPayload(crs8)
crs8.landOn(barge)

spaceStation.fetchPayload(vehicle: crs8)
crs8.land(on: barge)
6 changes: 3 additions & 3 deletions source/lsp.swift
Expand Up @@ -6,7 +6,7 @@ Derived classes must be substitutable for their base classes. ([read more](http:
Example:
*/

let requestKey: NSString = "NSURLRequestKey"
let requestKey: String = "NSURLRequestKey"

// I'm a NSError subclass. I provide additional functionality but don't mess with original ones.
class RequestError: NSError {
Expand All @@ -19,7 +19,7 @@ class RequestError: NSError {
// I fail to fetch data and will return RequestError.
func fetchData(request: NSURLRequest) -> (data: NSData?, error: RequestError?) {

let userInfo: [NSObject:AnyObject] = [ requestKey : request ]
let userInfo: [String:Any] = [requestKey : request]

return (nil, RequestError(domain:"DOMAIN", code:0, userInfo: userInfo))
}
Expand All @@ -28,7 +28,7 @@ func fetchData(request: NSURLRequest) -> (data: NSData?, error: RequestError?) {
func willReturnObjectOrError() -> (object: AnyObject?, error: NSError?) {

let request = NSURLRequest()
let result = fetchData(request)
let result = fetchData(request: request)

return (result.data, result.error)
}
Expand Down

0 comments on commit 8a12a6e

Please sign in to comment.