没有参数的函数在调用错误中缺少参数#1的参数。迅速

时间:2014-08-21 21:06:17

标签: ios swift xcode6-beta6

我正在使用xcode 6 beta 6,对于没有参数的函数,我得到了这个奇怪的错误。

这是函数

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
}

这是电话

var all = StudentList.allStudents()

这是一个错误还是我在这里做错了什么?

2 个答案:

答案 0 :(得分:51)

假设StudentList是一个类,即

class StudentList {

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

然后是这样的表达

var all = StudentList.allStudents() 

将抛出所述异常,因为allStudents应用于类而不是类的实例。 allStudents函数需要self参数(对实例的引用)。它解释了错误消息。

如果你这样做,这将解决。

var all = StudentList().allStudents()

答案 1 :(得分:13)

Swift有实例方法和类型方法。实例方法是从类的特定实例调用的方法。 Type Method是一个从类本身调用的静态方法。

实例方法

实例方法看起来像这样:

class StudentList {

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

为了调用allStudents方法,需要首先初始化StudentsList类。

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

尝试在类本身上调用实例方法会产生错误。

类型方法

Type Methods是属于类的静态方法,而不是类的实例。正如@ AnthodyKong的回答中提到的那样,可以在class之前使用staticfunc关键字创建类型方法。类通过引用传递,Structs按值传递,因此这些类称为引用类型和值类型。这是他们的样子:

参考类型

class StudentList {

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

值类型

struct StudentList {

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

致电

let all = StudentList.allStudents()

因为allStudents是一种类型方法,所以不需要首先初始化类(或结构)。

另见