I'm trying to set the values for NSArray using reference in Swift but can't seem to get it working.
var list = self.isFiltered ? self.filteredEventsList : self.eventsList
self.sortTableViewForEventName(&list)
Then:
private func sortTableViewForEventName(inout eventArray: NSArray) {
let sortedEvents = eventArray.sortedArrayUsingComparator({ (firstEvent, secondEvent) in
let firstEventName = (firstEvent as! Event).name
let secondEventName = (secondEvent as! Event).name
return firstEventName.compare(secondEventName)
})
eventArray = sortedEvents
}
The change in eventArray does not reflect in eventsList or filteredEventsList, whichever may be applicable.
You need to have a really good reason for using inout
parameters, and in this case I don't think you have one. You can simply have your function return the sorted array:
private func sortTableViewForEventName(eventArray: NSArray) -> NSArray {
let sortedEvents = eventArray.sortedArrayUsingComparator({ (firstEvent, secondEvent) in
let firstEventName = (firstEvent as! Event).name
let secondEventName = (secondEvent as! Event).name
return firstEventName.compare(secondEventName)
})
return sortedEvents
}
then you would say
var list = self.isFiltered ? self.filteredEventsList : self.eventsList
list = self.sortTableViewForEventName(list)
But, unless you have a good reason for using NSArray
, you can just use a Swift array and gain type awareness/safety and more concise sorting:
private func sortTableViewForEventName(eventArray: [Event]) -> [Event] {
let sortedEvents = eventArray.sort {
$0.name < $1.name
}
return sortedEvents
}