I have had numerous conversations about what exactly is Protocol Oriented Programming since my Protocol Oriented Programming with Swift book was released. Everyone I spoke to seemed to have his or her own opinion about what POP is. Out of all of those conversations I think this is the best explanation that I heard “Programming with an orientation toward the use of protocols for abstraction”.
Have you wanted to use the Swift programming language to write applications on your BeagleBone Black? How about programming robotics with Swift? This blog post will show how I setup my BeagleBone Black to use Swift and also shows how we can use the SwiftyGPIO package to interact with the digital GPIO ports on the BeagleBone Black.
Generic programming can be defined as "programming with concepts”. In this post we will look at the idea of Concepts in the Generic Programming paradigm and how this relates to Protocol Oriented Programming in Swift.
In this post I would like to look at the The Law of Useful Return. The Law of Useful Return says: If you have already done the work to get some useful result, don’t throw it away. Return it to the caller because they may be able to use it.
In this post we will look at the iterative approach to programming where we should be constantly looking to improve our code. Keep in mind that no one writes good code the first time' it takes many iterations to find the most efficient or general way to do something. No programmer should have a single pass mindset.
POP vs OOP
Numerous tutorials that I have seen take a very Object-Oriented approach to the protocol-oriented programming (POP) paradigm. By this statement I mean that they tell us that with POP we should begin our design with the protocol rather than with the superclass as we did with OOP however the protocol design tends to mirror the superclass design of OOP. They also tell us that we should use extensions to add common functionality to types that conform to a protocol as we did with superclasses in OOP. While protocols and protocol extensions are arguably two of the most important concepts of POP these tutorials seem to be missing some other very important concepts.
In this post I would like to compare Protocol-Oriented design to Object-Oriented design to highlight some of the conceptual differences.
At the Worldwide Developer’s Conference (WWDC) in 2015, Apple announced Swift 2 which was a major update to the Swift language. Swift 2 features many exciting enhancements and changes to the Swift language and was officially release in September of 2015. Now my Mastering Swift book has been completely updated for Swift 2 and is about to be released. The new update will carry the title Mastering Swift 2.
One of the many new features with Xcode 7 and Swift 2 is the @testable attribute. While we have been able to do unit testing in previous versions of Xcode and Swift the big drawback has always been that any routine we wanted to test had to have an access level of public. This was a pretty big drawback especially with frameworks where we need to test routines without making them public. This has changed in Xcode 7 and Swift 2. In this post we will demonstrate how to use the new @testable attribute in our test source code to make all public and internal routines usable by our test code but not usable by other frameworks and app targets.
In this post I will explain how we could use tuples to model our data and then I will show how I would replace the data model classes from my previous "Create a Data Access Layer using SQLite.swift" post with tuples. When we replace data modeling classes or structures with tuples our code can become much more compact and in some ways easier to understand however we do lose the ability to add functionality to our data model types, but is that a bad thing?
I would like to announce the release of RSNetworking 2 for Swift 2. RSNetworking and RSNetworking 2 are network libraries written entirely in the Swift programming language. RSNetworking 2 has all the same great features that RSNetworking has but it is written for Swift 2. This post describes RSNetworking 2 and explains how to use it.