我对 Swift 还很陌生,所以我在这里问的不是为什么它不起作用,而是为什么它起作用。我期待一些不同的东西。我有三个类(class),其中一个名为 User.swift
带有用户变量、获取方法和构造函数,另一个称为 UserList.swift
一个数组和一个自定义方法来向其中添加对象,另一个是我简单地使用此方法将 User 添加到该数组中。
正如你所看到的,当我调用listManager.addUser(...)
时我希望在括号之间写这样的内容:name: "random name", surname: "random surname", age: 0
但这给了我一个编译错误,说“调用中存在无关参数标签'name:'”。如果我删除“姓名:”它可以工作,但如果我删除“姓氏:”或“年龄:”它就不行。
我将把我的代码放在这里(它的工作原理正如我所说,我只需要理解为什么)。
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)
如您所见,没有“name:”标签
最佳答案
因为这是方法外部参数名称的规则。来自 the document :
Specifically, Swift gives the first parameter name in a method a local parameter name by default, and gives the second and subsequent parameter names both local and external parameter names by default. This convention matches the typical naming and calling convention you will be familiar with from writing Objective-C methods, and makes for expressive method calls without the need to qualify your parameter names.
如果你想这样调用它:
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
// ...
}
关于objective-c - 使用自定义方法将自定义对象添加到数组 Swift 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28584793/