想要从数组创建特定的属性值数组

时间:2015-09-26 12:24:01

标签: swift

拥有一组员工对象,称为员工,现在我想创建另一个名为filteremployees的数组,该数组只有id和出生日期值。 运用  让filteremployees = employee.map({$ 0.id}) 我可以得到只包含id值的数组,但我想要id以及dateOfBirth

class Employee {

    var id: Int
    var firstName: String
    var lastName: String
    var dateOfBirth: NSDate?

    init(id: Int, firstName: String, lastName: String) {
        self.id = id
        self.firstName = firstName
        self.lastName = lastName
    }
}

2 个答案:

答案 0 :(得分:2)

试试这个:

let employees : [Employee] = ...
let list: [(Int, NSDate?)] = employees.map { ($0.id, $0.dateOfBirth) }

您必须显式声明list的类型,否则您会从编译器中获得此错误

  

在没有更多上下文的情况下,表达式的类型不明确。

使用Xcode 7 Playground和Swift 2.0测试。

希望这有帮助。

答案 1 :(得分:1)

您可以尝试使用相同的map方法并返回预期值的元组:

let filter employees: [(Int, NSDate?)] = employee.map({ ($0.id, $0.dateOfBirth) })

或者,我认为这是一个更好的解决方案,创建一个新的值类型并仅使用您所需的值创建

struct FilteredEmployee {
    let id: String
    let dateOfBirth: NSDate?

    init(employee: Employee) {
        id = employee.id
        dateOfBirth = employee.dateOfBirth
    }
}

然后你可以在数组

上映射初始化器
    let filteremployees = employee.map { FilteredEmployee($0) }