
Class vs Structs
Both: Store values, initialize, subscripts, extensible & protocol
Class can inherit, de-initialize, reference counting & typecast
Functions vs Methods
Methods are FUNCTIONS INSIDE A CLASS
Functions can be inside or OUTSIDE A CLASS!
Cannot use functionName(param1,param2) to call a function declared inside a class {}
Methods:
- It is implicitly passed the object for which it was called
- It is able to operate on data that is contained within the class
Instance Methods vs Type Methods (Instance Method vs Class Methods I think)
Methods are functions that are associated with a particular type. Classes, structures, and enumerations can all define instance methods, which encapsulate specific tasks and functionality for working with an instance of a given type. Classes, structures, and enumerations can also define type methods, which are associated with the type itself. Type methods are similar to class methods in Objective-C.
class Counter {
var count = 0
func increment() {
count++
}
}
- let counter = Counter()
- counter.increment()
vs
class SomeClass {
class func someTypeMethod() {
// type method implementation goes here
}
}
SomeClass.someTypeMethod()
Class Factory vs Initializer
This is not particular to Swift but may come up in searches. A Class Factory method is what was know in ObjC as factory methods and I even saw them references as convenience methods or constructors. These are instead of:
NSArray *someArray = [[NSArray alloc] init]];
they would be:
NSArray *someArray = [NSArray arrayWithObjects:@”One”, @”Two”];
Another example:
UITableView *myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
let myTableView: UITableView = UITableView(frame: CGRectZero, style: .Grouped)
ObjC class or factory methods get mapped as convenience initializers in Swift. So:
UIColor *color = [UIColor colorWithRed:0.5 green:0.0 blue:0.5 alpha:1.0];
gets translated into this:
let color = UIColor(red: 0.5, green: 0.0, blue: 0.5, alpha: 1.0)
Designated Initializer vs Convenience Initializer
A designated initializer calls its superclass’ init and defines all values added by the self class. Unless explicitly provided, a class inherits a super initializer from its superclass.
Any other convenience initializer calls self.init and have the convenience keyword before the init keyword.
Initialization must be done in order; own properties, super, super properties.
Initializers & Optionals in one 🙂
class SurveyQuestion {
let text: String
var response: String?
init(text: String) {
self.text = text
}
func ask() {
println(text)
}
}
let beetsQuestion = SurveyQuestion(text: "How about beets?")
beetsQuestion.ask()
// prints "How about beets?"
beetsQuestion.response = "I also like beets. (But not with cheese.)"
Default Initializers
class ShoppingListItem {
var name: String?
var quantity = 1
var purchased = false
}
var item = ShoppingListItem()
All non-optional values are supplied with a default value and it is a Base Class (because it doesn’t have a super class)
Diagram:
class A {
var x: Int
convenience init() {
self.init(x: 0)
}
init(x: Int) {
self.x = x
}
}
where init(x:Int) is the designated initializer and any other must have the convenience keyword.
class B: A {
var y: Int
convenience init() {
self.init(y: 0)
}
convenience init(y: Int) {
self.init(x: 0, y: y)
}
init(x: Int, y: Int) {
self.y = y
super.init(x: x)
}
}
Parameter Names / Externals / The first
//Default: First Parameter is the local parameter (don't need to specify it), the rest are external parameters
func greet (name: String, day: String) -> String {
return "Hello \(name), today is \(day)."
}
greet("John", day:"Monday")
//Use Hash symbol to make the First parameter as external parameter
func greet2 (#name: String, day: String) -> String {
return "Hello \(name), today is \(day)."
}
greet(name:"John", day:"Monday")
Really nice overview “over” the confusion stuff in swift)
Wish you would continue ) I guess there is a lot of place for other “confusions” in swift)… maybe at some point even going into more details over why and how this is needed or happens.
I guess even 4 more parts may not be enough 🙂