I am using xcode 6 beta 6 and I get this weird error for a function that has no params.
Here is the function
func allStudents ()-> [String]{
var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
var context:NSManagedObjectContext = appDel.managedObjectContext!
var request = NSFetchRequest(entityName: "Student")
request.returnsObjectsAsFaults = false
//Set error to nil for now
//TODO: Give an actual error.
var result:NSArray = context.executeFetchRequest(request, error: nil)
var students:[String]!
for child in result{
var fullname:String = child.valueForKey("firstName") as String + " "
fullname += child.valueForKey("middleName") as String + " "
fullname += child.valueForKey("lastName") as String
students.append(fullname)
}
return students
}
and here is the call
var all = StudentList.allStudents()
Is this a bug or am I doing something wrong here?
Swift has Instance Methods and Type Methods. An instance method is a method that is called from a particular instance of a class. A Type Method is a static method that is called from the class itself.
Instance Methods
An instance method would look something like this:
In order for the
allStudents
method to be called, theStudentsList
class needs to be initialized first.Trying to call an instance method on the class itself gives an error.
Type Methods
Type Methods are static methods that belong to the class, not an instance of the class. As was alluded to in the comments to @AnthodyKong's answer, a Type Method can be created by using the
class
orstatic
keywords beforefunc
. Classes are passed by reference and Structs are passed by value, so these are known as reference type and value type. Here are what they would look like:Reference Type
Value Type
Call with
Because
allStudents
is a Type Method, the class (or struct) doesn't need to be initialized first.See also
Assuming
StudentList
is a class, i.e.Then an expression like this
will throw the said exception, because
allStudents
is applied to a class instead of an instance of the class. TheallStudents
function is expecting aself
parameter (a reference to the instance). It explains the error message.This will be resolved if you do