2016-03-03 54 views
0

我寧願用PersonStruct,但我因爲它沒有確認到AnyObject,我不能NSCountedSet斯威夫特:NSCountedSet與地圖

class Person: AnyObject { 
    var name: String = "" 
    var age: Int = 0 
    var score: Int = 0 
} 


let personA = Person() 
personA.name = "john" 
let personB = Person() 
personB.name = "larry" 
let personC = Person() 
personC.name = "jack" 
let personD = Person() 
personD.name = "bob" 


var people:[AnyObject] = [personD, personC, personA, personB, personC, personA, personC, personD, personD] 
let countedPeople = NSCountedSet(array: people) // 

使用它,我想分配「分數」每個對象的屬性對每個對象的計數NSCountedSet

我想用Map來做到這一點。下面的代碼不能編譯。

let peopleWithUpdatedScore = countedPeople.map{(var person: Person) -> Person in 
    // I would like to assign the count of each Object as the persons score. 
    person.score = countForObject(person) 
    return person 
} 

我得到以下錯誤:

error: cannot convert value of type 'Person -> Person' to expected argument type '(Element) -> _' 
let peopleWithUpdatedScore = countedPeople.map{(var person: Person) -> Person in 

問題1:如何解決錯誤,實現什麼,我試圖做的?

問題2:我可以使用Struct而不是Personclass

回答

1

由於NSCountedSet不是通用的,因此您需要將元素投射到Person

let peopleWithUpdatedScore = countedPeople.map { (elm) -> Person in 
    guard var person = elm as? Person else { fatalError() } 
    person.score = countedPeople.countForObject(elm) 
    return person 
} 
+0

謝謝。有沒有一種方法可以使用Struct? – user1107173

+1

你將不得不使用一個類,因爲NSCountedSet是Cocoa/Objective-C,並且看不到Swift結構。 http://www.apeth.com/swiftBook/apa.html#_objective_c_objects_and_swift_objects – matt

+1

@ user1107173:我想你應該在Swift中編寫自己的'CountedSet'版本。 –