ios 在没有参数的函数的调用错误中缺少参数 #1 的参数。迅速
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/25435928/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Missing argument for parameter #1 in call error for function with no params. Swift
提问by Boid
I am using xcode 6 beta 6 and I get this weird error for a function that has no params.
我正在使用 xcode 6 beta 6,对于没有参数的函数,我收到了这个奇怪的错误。
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?
这是一个错误还是我在这里做错了什么?
回答by Anthony Kong
Assuming StudentList
is a class, i.e.
假设StudentList
是一个类,即
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.
将抛出所述异常,因为allStudents
应用于类而不是类的实例。该allStudents
函数需要一个self
参数(对实例的引用)。它解释了错误消息。
This will be resolved if you do
如果您这样做,这将得到解决
var all = StudentList().allStudents()
回答by Suragch
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.
Swift 有实例方法和类型方法。实例方法是从类的特定实例调用的方法。类型方法是从类本身调用的静态方法。
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.
为了allStudents
调用该方法,StudentsList
需要首先初始化该类。
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 Methodsare 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:
类型方法是属于类的静态方法,而不是类的实例。正如对@AnthodyKong 的回答的评论中所提到的,可以通过在之前使用class
或static
关键字来创建类型方法func
。类按引用传递,结构按值传递,因此它们被称为引用类型和值类型。以下是它们的外观:
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.
因为allStudents
是类型方法,所以不需要先初始化类(或结构)。
See also
也可以看看