【问题标题】:Add custom object to array with custom method Swift issue使用自定义方法 Swift 问题将自定义对象添加到数组
【发布时间】:2015-02-18 13:27:49
【问题描述】:

我是 Swift 的新手,所以我在这里问的不是为什么它不起作用,而是为什么它起作用。我期待一些不同的东西。我有三个类,一个称为User.swift,带有用户变量、get 方法和构造函数,另一个称为UserList.swift,带有一个数组和一个自定义方法来向其中添加对象,另一个我只是使用此方法将用户添加到此大批。 如您所见,当我调用listManager.addUser(...) 时,我希望在括号之间写出类似这样的内容:name: "random name", surname: "random surname", age: 0 但这给了我一个编译错误,说“调用中的外部参数标签'名称:'”。如果我删除“姓名:”它会起作用,但如果我删除“姓氏:”或“年龄:”它不会。 我会把我的代码放在这里(它就像我说的那样工作,我只需要理解为什么)。

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)

如您所见,没有“名称:”标签

【问题讨论】:

    标签: objective-c arrays object swift constructor


    【解决方案1】:

    因为这是方法的外部参数名称的规则。来自the document

    具体来说,Swift 默认为方法中的第一个参数名称提供本地参数名称,并默认为第二个和后续参数名称提供本地和外部参数名称。此约定与您在编写 Objective-C 方法时熟悉的典型命名和调用约定相匹配,并且无需限定参数名称即可进行富有表现力的方法调用。

    如果你想这样称呼它:

    listManager.addUser(name: "random name", surname: "random surname", age: 0)
    

    你必须声明addUser like:

    func addUser(#name: String, surname: String, age: Int){
    //           ^ This forces the external parameter name
        // ...
    }
    

    【讨论】:

    【解决方案2】:

    在编写具有多个参数但没有外部参数名称的函数时,这似乎是一个错误。通常,按照您声明函数的方式,您应该按以下方式使用它:

    listManager.addUser("random name", "random surname", 0)
    

    但目前只有第一个参数按预期工作。奇怪的是,如果您使用简写的外部参数名称并声明函数如下:

    func addUser(#name: String, #surname: String, #age: Int){
        userList.append(User(name: name, surname: surname, age: age))
    }
    

    您会收到一条警告,说第一个参数之后的每个参数都已经是关键字参数名称,所以这绝对是一个错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-23
      • 2023-04-02
      • 2019-07-28
      • 2020-12-28
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2018-08-10
      相关资源
      最近更新 更多