Missing argument for parameter #1 in call error for function with no params. Swift

后端 未结 2 388
自闭症患者
自闭症患者 2021-01-01 11:53

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]{
    v         


        
相关标签:
2条回答
  • 2021-01-01 12:23

    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:

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

    In order for the allStudents method to be called, the StudentsList class needs to be initialized first.

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

    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 or static keywords before func. 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

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

    Value Type

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

    Call with

    let all = StudentList.allStudents()
    

    Because allStudents is a Type Method, the class (or struct) doesn't need to be initialized first.

    See also

    • Method documentation
    • Instance Methods and Type Methods in Swift
    0 讨论(0)
  • 2021-01-01 12:40

    Assuming StudentList is a class, i.e.

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

    Then an expression like this

    var all = StudentList.allStudents() 
    

    will throw the said exception, because allStudents is applied to a class instead of an instance of the class. The allStudents function is expecting a self parameter (a reference to the instance). It explains the error message.

    This will be resolved if you do

    var all = StudentList().allStudents()
    
    0 讨论(0)
提交回复
热议问题