2015-09-26 74 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

我正在嘗試相同的解決方案,但您的第一個代碼塊不能編譯。 –