我在Swift中很新,所以我在这里问的不是为什么它不起作用,而是为什么它起作用。我期待不同的东西。我有三个类,一个名为User.swift
,包含用户变量,get方法和构造函数,另一个名为UserList.swift
,带有一个数组,一个自定义方法用于向其添加对象,另一个用于简单地使用此方法将User添加到此数组。
正如你所看到的,当我调用listManager.addUser(...)
时,我希望在括号之间写一下这样的内容:name: "random name", surname: "random surname", age: 0
但是这给了我一个编译错误说"外来的参数标签'名称:& #39;在电话"。如果我删除"名称:"它有效,但如果我删除"姓:"或"年龄:"它没有。
我会把我的代码放在这里(按照我的说法工作,我只能理解为什么)。
User.swift
import Foundation
class User: NSObject {
private var name: String
private var surname: String
private var age: Int
init(name: String, surname: String, age: Int){
self.name = name
self.surname = surname
self.age = age;
}
func getName() -> String{
return self.name
}
func getSurname() -> String{
return self.surname
}
func getAge() -> Int{
return self.age
}
}
UserList.swift
import UIKit
var listManager: UserList = UserList()
class UserList: NSObject {
var userList = [User]()
func addUser(name: String, surname: String, age: Int){
userList.append(User(name: name, surname: surname, age: age))
}
}
我使用addUser()
的类listManager.addUser("random name", surname: "random surname", age: 0)
正如你所看到的,没有"#34;名称:"标签
答案 0 :(得分:1)
因为这是方法的外部参数名称的规则。来自the document:
具体来说,默认情况下,Swift在方法中为第一个参数名称提供本地参数名称,默认情况下为第二个和后续参数名称提供本地和外部参数名称。此约定与您在编写Objective-C方法时熟悉的典型命名和调用约定相匹配,并且无需限定参数名称即可进行表达式方法调用。
如果您想将其称为:
listManager.addUser(name: "random name", surname: "random surname", age: 0)
你必须声明addUser
之类的:
func addUser(#name: String, surname: String, age: Int){
// ^ This forces the external parameter name
// ...
}
答案 1 :(得分:0)
在使用多个参数编写函数而没有外部参数名称时,这似乎是一个错误。通常在您声明函数的方式中,您应该按照以下方式使用它:
listManager.addUser("random name", "random surname", 0)
但目前只有第一个参数按预期工作。奇怪的是,如果您使用速记外部参数名称并声明函数如下:
func addUser(#name: String, #surname: String, #age: Int){
userList.append(User(name: name, surname: surname, age: age))
}
你得到一个警告,说第一个之后的每个参数都已经是一个关键字参数名,所以这肯定是一个错误