valores una todas tipos retornan que llamar lenguaje las funciones funcion estructura ejemplos como ios swift xcode6-beta6

ios - una - tipos de funciones en lenguaje c



Falta el argumento para el parámetro#1 en el error de llamada para una función sin parámetros. Rápido (2)

Estoy usando xcode 6 beta 6 y obtengo este error extraño para una función que no tiene parámetros.

Aquí está la función

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 }

y aqui esta la llamada

var all = StudentList.allStudents()

¿Es esto un error o estoy haciendo algo mal aquí?


Asumiendo que StudentList es una clase, es decir

class StudentList { func allStudents ()-> [String]{ .... } }

Entonces una expresión como esta

var all = StudentList.allStudents()

lanzará dicha excepción, porque allStudents se aplica a una clase en lugar de a una instancia de la clase. La función allStudents está esperando un parámetro self (una referencia a la instancia). Explica el mensaje de error.

Esto se resolverá si lo haces

var all = StudentList().allStudents()


Swift tiene métodos de instancia y métodos de tipo. Un método de instancia es un método que se llama desde una instancia particular de una clase. Un método de tipo es un método estático que se llama desde la propia clase.

Métodos de instancia

Un método de instancia sería algo como esto:

class StudentList { func allStudents() -> [String] { .... } }

Para que se allStudents método allStudents , primero debe inicializarse la clase StudentsList .

let list = StudentsList() // initialize the class let all = list.allStudents() // call a method on the class instance

Intentar llamar a un método de instancia en la clase en sí da un error.

Métodos de tipo

Los métodos de tipo son métodos estáticos que pertenecen a la clase, no una instancia de la clase. Como se mencionó en los comentarios a la respuesta de @ AnthodyKong, se puede crear un Método de Tipo usando la class o palabras clave static antes de func . Las clases se pasan por referencia y las estructuras se pasan por valor, por lo que se conocen como tipo de referencia y tipo de valor. Aquí están los que se verían:

Tipo de referencia

class StudentList { class func allStudents() -> [String] { .... } }

Tipo de valor

struct StudentList { static func allStudents() -> [String] { .... } }

Llamar con

let all = StudentList.allStudents()

Debido a que allStudents es un método de tipo, la clase (o estructura) no necesita inicializarse primero.

Ver también