使用自定义方法Swift问题将自定义对象添加到数组

时间:2015-02-18 13:27:49

标签: objective-c arrays object swift constructor

我在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;名称:"标签

2 个答案:

答案 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))
}

你得到一个警告,说第一个之后的每个参数都已经是一个关键字参数名,所以这肯定是一个错误