【问题标题】:How to destructure variable into function's parameter?如何将变量解构为函数的参数?
【发布时间】:2022-07-14 22:31:24
【问题描述】:

如何将对象中所有键的值作为函数参数传递?就像蟒蛇一样。 我有一个函数getNameInfo 带有默认值firstName, lastName, age 的参数和一个带有键firstName, lastName, age 的对象我如何描述pbject 并将键的所有值传递给函数?在 python 中我可以做类似getNameInfo(**a.__dict__.values()) 但是

class Person {
    public var firstName = "firstName"
    public var lastName = "lastName"
    public var age = 12
  
    public init(firstName: String, lastName: String, age: Int){
    self.firstName = firstName
    self.lastName = lastName
    self.age = age
    
  }
  
}
let a = Person(firstName: "firstName", lastName: "lastName", age: 12)
func getNameInfo(firstName: String = "i am first", lastName: String = "I am lat", age: Int = 50) {
  print("\(fName), \(lName), \(age)")
}
getNameInfo()
// getNameInfo(a) // expect to print out firstName, lastName, 12

【问题讨论】:

  • 不要尝试在 Swift 中做 Python 的事情。将getNameInfo 改为Person 怎么样?

标签: swift


【解决方案1】:

Swift 中没有类似的功能。最接近的版本是使用协议:

protocol NameInfoProviding {
    var firstName: String { get }
    var lastName: String { get }
    var age: Int { get }
}

extension Person: NameInfoProviding {}

func getNameInfo(_ nameInfo: some NameInfoProviding) {
    print("\(nameInfo.firstName), \(nameInfo.lastName), \(nameInfo.age)")
}
getNameInfo(a)

但是,是的,这是一个不同的功能,并以不同的方式使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-28
    • 2020-09-13
    • 2013-08-10
    • 1970-01-01
    • 2018-03-09
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多