2015-09-26 42 views
0

拥有员工对象数组,名为employees,现在我想创建另一个名为filteremployees的数组,该数组只有id和出生日期值。 使用 让filteremployees = employee.map({$ 0.id}) 我可以得到数组,它包含的值只有ID,但我想有ID,以及出生日期想从数组中创建特定的属性值数组

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 
    } 
} 
+0

你想通过一个数组循环,并将过滤的数据添加到另一个数组? – Skywalker

+0

@Jatin:一个建议:'Employee'是一个很好的候选人,可以在这里作为'struct'。而这些属性是用'let'而不是'var'声明的好候选者。看看* Abizern *用'FilteredEmployee结构体'做了什么。 –

回答

2

试试这个:

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

您必须显式声明的list类型,否则你从编译器得到这个错误

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

测试Xcode 7 Playground和Swift 2.0。

希望这会有所帮助。

1

你可以尝试使用相同的地图方法并返回您的预计值的元组:

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) } 
+0

我正在尝试相同的解决方案,但您的第一个代码块不能编译。 –